在使用JavaScript时,我曾经解决过类似的错误,但是现在使用Typescript时无法做到。
在安装Puppeteer之前,我的所有测试都能够正常运行,但是安装Puppeteer之后需要安装@types/jest-environment-puppeteer
、@types/puppeteer
和@types/expect-puppeteer
。
安装完它们后,Puppeteer测试可以完美运行,但其他测试会出现以下错误。
D:\...\api\node_modules\uuid\dist\esm-browser\index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){export { default as v1 } from './v1.js';
^^^^^^
SyntaxError: Unexpected token 'export'
at Runtime.createScriptFromCode (../node_modules/jest-runtime/build/index.js:1796:14)
at Object.require (../node_modules/@nestjs/common/decorators/core/injectable.decorator.js:4:16)
我做了什么?
在tsconfig.json
上设置allowJs: true
,并在jest配置中设置transformIgnorePatterns
,以便jest可以编译来自node_modules/
的文件。之后这个错误停止了,但测试失败了,原因很奇怪。更糟糕的是测试启动时间也增加了很多。
所以我保留了原始设置中的allowJs
,并更新了jest配置。
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
}
to
"transform": {
"^.+\\.(t)s$": "ts-jest"
}
目前,ts-jest无法编译js文件。但我认为我无法让babel选择js文件的转换。这是我的jest配置:
{
"moduleFileExtensions": ["js", "json", "ts"],
"rootDir": ".",
"testEnvironment": "node",
"testRegex": ".e2e-spec.ts$",
"transform": {
"^.+\\.(t)s$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest"
},
"transformIgnorePatterns": ["<rootDir>/node_modules/.+.(js|jsx)$"]
}
jest.config.ts
文件,但引号总是被剥离掉"uuid"
,而且修复方法也不起作用。通过将其改为"^uuid$"
,这个问题得到了解决。截至2022年8月23日,最新版本的 uuid 仍然是 beta 版本,并且链接中指出它仅与 jest 的 beta 29.x 版本进行了测试,因此我认为既然我刚从 27.x 版本升级,我现在会继续使用这个解决方案。谢谢。 - Tod