jestjs - TypeScript 项目中出现意外的 export 令牌 - transformIgnorePattern 问题
我有一个 TypeScript 项目,使用 Jest 进行测试,一切运行良好,使用 ts-jest 作为转换器。然而,当我尝试使用一个看起来是用 TypeScript 编写但以 ES6 形式发布的包时,我在运行测试时遇到了可怕的“Unexpected token export”错误,当测试执行到该新包的“export”关键字时就会出现这个错误。
我明白为什么会发生这种情况,但即使我已经广泛研究了这个问题,并看到其他人是如何使用 transformIgnorePatterns 解决它的(像这条帖子评论和许多其他例子),我还是无法想出如何绕过它,到目前为止我在这方面没有取得任何进展。
测试运行良好,直到我导入并引用其中一个有问题的库。只需添加:
import { Environment, EnvironmentType } from '@microsoft/sp-core-library';
...
const x: EnvironmentType = Environment.type;
...然后运行我的测试给我:
/Users/ac/_play/jest-transform-repro/node_modules/@microsoft/sp-core-library/lib/index.js:11
export { default as _BrowserDetection } from './BrowserDetection';
^^^^^^
SyntaxError: Unexpected token export
我创建了一个项目,以便可以轻松在这里重现我的问题:https://github.com/andrewconnell/jest-transform-repro
- 克隆 https://github.com/andrewconnell/jest-transform-repro
- npm 安装
- npm 测试
观察一切运作
- 打开文件 ./src/webparts/helloWorld/components/Sample/Sample.tsx 并取消注释这两行
- npm 测试
观察失败
我尝试过将我的 transformIgnorePatterns 更新为 <rootDir>/../node_modules/(?!(@microsoft/sp-core-library)) 以及它的不同变体,但这没有帮助。我看到过关于将 .bablerc 改为 babel.config.js 的帖子,但我在项目中没有使用 Babel,因为全部都是 TypeScript。
一旦我让这个库正常工作,我知道我需要排除更多……很多……所以理想情况下,我希望创建一些可以处理“@microsoft/*”包的东西,而不仅仅是上面列出的那个库。正如你可以从上面仓库的默认“npm install”看到的,还有很多其他包会给我带来问题。
有什么想法吗?我不知道该怎么办 :(
答案#1
这是我为了在 TS SPFX 项目下使 jest 工作而做的更改:
tsconfig.json- 启用
"allowJs": true,
package.json(添加 jest 配置):
"jest": {
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"testURL": "http://localhost",
"transform": {
"^.+\\.(js|ts|tsx)$": "ts-jest"
},
"transformIgnorePatterns": [
"node_modules/(?!(@microsoft/sp-dialog|@microsoft/office-ui-fabric-react-bundle|@microsoft/sp-diagnostics|@microsoft/sp-core-library|@microsoft/sp-http|@microsoft/sp-page-context|@microsoft/sp-dynamic-data|@pnp/sp|@pnp/common|@pnp/odata|@pnp))"
],
"testMatch": [
"**/src/**/*.test.+(ts|tsx|js)",
"**/__tests__/**/*.(spec|test).+(tsx|ts|js)?(x)"
],
"moduleNameMapper": {
"\\.(css|less|scss|sass)$": "identity-obj-proxy",
"^resx-strings/en-us.json": "<rootDir>/node_modules/@microsoft/sp-core-library/lib/resx-strings/en-us.json"
},
}
附加包:
"ts-jest": "^24.0.2","jest": "^26.6.3","jest-junit": "^12.0.0","@types/jest": "^26.0.15","identity-obj-proxy": "^3.0.0",
另一方面,我使用的是 react-testing-library 而不是 enzyme
