测试 Piece

如何为 Piece 添加单元测试

测试 Piece 是可选的,但对于复杂逻辑是推荐的。可以使用 Vitest 配合框架中的 createMockActionContext 辅助函数来测试 Piece。

完整的可运行示例,请参见 text-helper piece 的 GitHub 测试

设置

1. 为你的 Piece 添加 vitest

在 Piece 的 package.json 中添加 vitest 作为 dev 依赖项,并添加 test 脚本:

{
  "scripts": {
    "build": "tsc -p tsconfig.lib.json && cp package.json dist/",
    "lint": "eslint 'src/**/*.ts'",
    "test": "vitest run"
  },
  "devDependencies": {
    "vitest": "3.0.8"
  }
}

2. 创建 vitest 配置

在 Piece 根目录下创建 vitest.config.ts

import path from 'path'
import { defineConfig } from 'vitest/config'

const repoRoot = path.resolve(__dirname, '../../../..')

export default defineConfig({
  test: {
    globals: true,
    environment: 'node',
  },
  resolve: {
    alias: {
      '@activepieces/shared': path.resolve(repoRoot, 'packages/shared/src/index.ts'),
      '@activepieces/pieces-framework': path.resolve(repoRoot, 'packages/pieces/framework/src/index.ts'),
      '@activepieces/pieces-common': path.resolve(repoRoot, 'packages/pieces/common/src/index.ts'),
    },
  },
})

3. 编写测试

创建 test/ 目录并添加 .test.ts 文件:

import { createMockActionContext } from '@activepieces/pieces-framework';
import { myAction } from '../src/lib/actions/my-action';

describe('myAction', () => {
  test('执行某些操作', async () => {
    const ctx = createMockActionContext({
      propsValue: {
        inputField: '测试值',
      },
    });

    const result = await myAction.run(ctx);
    expect(result).toBe('期望的输出');
  });
});

4. 运行测试

# 为特定 Piece 运行测试
npx turbo test --filter=@activepieces/piece-text-helper

# 从 Piece 目录直接运行测试
cd packages/pieces/core/text-helper
npx vitest run