我有一个使用Jest测试的TypeScript项目,使用ts-jest作为我的转换器,可以正常工作。但是,当我尝试使用似乎是用TypeScript编写但作为ES6分发的软件包时,我在运行测试时遇到了令人恐惧的错误:“意外的令牌导出”错误新包装。
我了解为什么会发生这种情况,但是即使对这一问题进行了广泛的研究并看到其他人如何使用transformIgnorePatterns
(例如这篇文章comment和等等),但到目前为止,我还没有取得任何进展。
测试运行良好,直到我导入并引用了这些问题库之一。只需添加:
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
观察一切正常
观察失败
我尝试将transformIgnorePatterns
更新为<rootDir>/../node_modules/(?!(@microsoft/sp-core-library))
,并尝试了不同的方式,但这无济于事。我已经看过有关更改.bablerc => babel.config.js的帖子,但是我没有在我的项目中使用Babel,因为这都是TypeScript。
一旦我为这个库工作了,我知道我需要排除更多……更多……所以理想情况下,我想创建一些解决“ @ microsoft / *”包的问题,您不仅可以从上面的回购中默认的“ npm install”中看到上面列出的内容,还有很多其他内容会给我带来麻烦。
想法?我很茫然:(
答案 0 :(得分:0)
这些是我开玩笑所做的更改,以便在TS SPFX项目下工作:
tsconfig.json
"allowJs": true,
package.json
(添加笑话配置):
"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",
另一方面,我使用的是enzyme
react-testing-library