diff --git a/.changeset/orange-horses-wonder.md b/.changeset/orange-horses-wonder.md new file mode 100644 index 00000000000..6a9b89a8f33 --- /dev/null +++ b/.changeset/orange-horses-wonder.md @@ -0,0 +1,6 @@ +--- +'@modern-js/plugin-testing': patch +--- + +fix: jest unexpected token error for @modern-js/runtime +fix: 修复 Jest 对于 @modern-js/runtime 出现 unexpected token 的错误 diff --git a/packages/runtime/plugin-testing/src/cli/index.ts b/packages/runtime/plugin-testing/src/cli/index.ts index b08b38b96a0..4948a2d0962 100644 --- a/packages/runtime/plugin-testing/src/cli/index.ts +++ b/packages/runtime/plugin-testing/src/cli/index.ts @@ -26,6 +26,26 @@ export const mergeUserJestConfig = (testUtils: TestConfigOperator) => { } }; +export const getJestTransformEsModulesRegStr = () => { + const esmModulesInPnpm = [ + '@modern-js\\+runtime@', + '@modern-js\\+plugin@', + // @modern-js-reduck+store, @modern-js-reduck+effects and so on + '@modern-js-reduck', + '@babel\\+runtime@', + ]; + // yarn or npm + const esmModules = [ + '@modern-js/runtime', + '@modern-js/plugin', + '@modern-js-reduck', + '@babel/runtime', + ]; + return `node_modules/(?!(\\.pnpm/(${esmModulesInPnpm.join( + '|', + )}))|(${esmModules.join('|')}))`; +}; + export const testingPlugin = (): CliPlugin<{ hooks: Hooks; userConfig: UserConfig; @@ -128,6 +148,7 @@ export const testingPlugin = (): CliPlugin<{ `/src/**/*.test.[jt]s?(x)`, `/tests/**/*.test.[jt]s?(x)`, ], + transformIgnorePatterns: [getJestTransformEsModulesRegStr()], }); mergeUserJestConfig(utils); diff --git a/packages/runtime/plugin-testing/tests/jestTransformEsModueRegExpStr.test.ts b/packages/runtime/plugin-testing/tests/jestTransformEsModueRegExpStr.test.ts new file mode 100644 index 00000000000..8905a228527 --- /dev/null +++ b/packages/runtime/plugin-testing/tests/jestTransformEsModueRegExpStr.test.ts @@ -0,0 +1,25 @@ +import { getJestTransformEsModulesRegStr } from '../src/cli'; + +describe('Jest transform esModules RegExp String ', () => { + const r = new RegExp(getJestTransformEsModulesRegStr()); + it('In pnpm project', () => { + expect(r.test('node_modules/.pnpm/@modern-js+runtime@0.0.0')).toBeFalsy(); + expect(r.test('node_modules/.pnpm/@modern-js+plugin@0.0.0')).toBeFalsy(); + expect( + r.test('node_modules/.pnpm/@modern-js-reduck+store@0.0.0'), + ).toBeFalsy(); + expect( + r.test('node_modules/.pnpm/@modern-js-reduck+plugin-effects@0.0.0'), + ).toBeFalsy(); + expect(r.test('node_modules/apnpm/@modern-js+runtime@0.0.0')).toBeTruthy(); + expect(r.test('node_modules/.pnpm/webpack')).toBeTruthy(); + }); + + it('In npm or yarn@1 project', () => { + expect(r.test('node_modules/@modern-js/runtime')).toBeFalsy(); + expect(r.test('node_modules/@modern-js/plugin')).toBeFalsy(); + expect(r.test('node_modules/@modern-js-reduck/store')).toBeFalsy(); + expect(r.test('node_modules/@modern-js-reduck/plugin-effects')).toBeFalsy(); + expect(r.test('node_modules/webpack')).toBeTruthy(); + }); +});