diff --git a/packages/core/test/src/__tests__/vitest-config.test.ts b/packages/core/test/src/__tests__/vitest-config.test.ts new file mode 100644 index 00000000000..98b85d00886 --- /dev/null +++ b/packages/core/test/src/__tests__/vitest-config.test.ts @@ -0,0 +1,45 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import { afterEach, describe, expect, test } from 'vitest'; + +import { defineConfig, getFilterInclude } from '../../vitest.mjs'; + +const originalArgv = [...process.argv]; +const originalTestEnv = process.env.TEST_ENV; + +afterEach(() => { + process.argv = [...originalArgv]; + + if (originalTestEnv === undefined) { + delete process.env.TEST_ENV; + return; + } + + process.env.TEST_ENV = originalTestEnv; +}); + +describe('vitest test routing', () => { + test('server-side config excludes plugin client-v2 tests', () => { + process.env.TEST_ENV = 'server-side'; + process.argv = ['node', 'vitest']; + + const config = defineConfig(); + + expect(config.test.exclude).toContain('packages/**/src/client-v2/**/*'); + }); + + test('client-side package filter includes plugin client-v2 tests', () => { + process.argv = ['node', 'vitest', 'packages/plugins/@nocobase/plugin-acl']; + + expect(getFilterInclude(false).include).toContain( + 'packages/plugins/@nocobase/plugin-acl/src/client-v2/**/__tests__/**/*.{test,spec}.{ts,tsx}', + ); + }); +}); diff --git a/packages/core/test/vitest.mjs b/packages/core/test/vitest.mjs index f7a88d88fce..c1a0df56541 100644 --- a/packages/core/test/vitest.mjs +++ b/packages/core/test/vitest.mjs @@ -10,6 +10,7 @@ const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const CORE_CLIENT_PACKAGES = ['sdk', 'client', 'client-v2', 'flow-engine']; +const PLUGIN_CLIENT_PACKAGES = ['client', 'client-v2']; // 按路径填写要跳过服务端测试的插件目录(相对仓库根目录) const skipPluginPaths = [ 'packages/plugins/@nocobase/plugin-audit-logs', @@ -114,7 +115,7 @@ const defineCommonConfig = () => { function getExclude(isServer) { return [ `packages/core/${isServer ? '' : '!'}(${CORE_CLIENT_PACKAGES.join('|')})/**/*`, - `packages/**/src/${isServer ? 'client' : 'server'}/**/*`, + ...(isServer ? PLUGIN_CLIENT_PACKAGES : ['server']).map((dir) => `packages/**/src/${dir}/**/*`), ]; } @@ -220,7 +221,9 @@ export const getFilterInclude = (isServer, isCoverage) => { // 插件目录,区分 client 和 server return { - include: [`${filterFileOrDir}/src/${isServer ? 'server' : 'client'}/${suffix}`], + include: isServer + ? [`${filterFileOrDir}/src/server/${suffix}`] + : PLUGIN_CLIENT_PACKAGES.map((dir) => `${filterFileOrDir}/src/${dir}/${suffix}`), }; };