我正在尝试测试一个需要导入ES6模块的文件,像这样:
看起来我缺少一些配置使其正常工作。
如果您能够轻松使用另一个单元测试框架实现此目的,我也很感兴趣。
谢谢您提前的帮助。
我正在尝试测试一个需要导入ES6模块的文件,像这样:
看起来我缺少一些配置使其正常工作。
如果您能够轻松使用另一个单元测试框架实现此目的,我也很感兴趣。
谢谢您提前的帮助。
yarn add --dev babel-jest @babel/core @babel/preset-env
或者
npm install --save-dev babel-jest @babel/core @babel/preset-env
babel.config.js
文件并将其粘贴到该文件中:// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
package.json
和jest.config.js
中所有的jest设置都是默认值。由于Node不支持模块化,你需要使用Babel来编译你的文件。请查看文档以了解如何配置Jest和Babel。
--experimental-modules
选项支持模块化。 - Dan Dascalescu"type": "module"
will only work from node v12 onwards https://nodejs.org/docs/latest-v12.x/api/esm.html but you can use node -r esm
- velop"type":"module"
(除非你按照官方 Node 的方式进行操作)。如果你只是使用-r esm
...与支持它的普通库(例如Node本身或Mocha)一起使用,ES6模块就可以“正常工作”。 - machineghost我曾经遇到过与npm包“rgb-hex”和“hex-rgb”类似的问题,因为它们的主要导出是以ES6格式完成的。我正在使用一个带有Jest的TypeScript项目。我认为错误来自于Jest而不是TypeScript,因为Jest可以在正确转换的JavaScript上工作(根据其自己的配置)。潜在的问题是这些ES6风格的主要导出将会导致Jest出现问题(而不是tsc或TypeScript链),因为你需要告诉Jest进行转换。
我使用了“ts-jest”包找到了一个可用的配置,基于简单的预设(唯一需要注意的是忽略模式):
tsconfig.json:
{
"compilerOptions": {
"esModuleInterop": true,
"module": "es2020",
"moduleResolution": "nodenext",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"rootDir": "./",
"allowJs": true
},
"ts-node": {
"esm": true
},
"include": ["./ts-src/**/*"]
}
jest.config.cjs
module.exports = {
verbose: true,
preset: 'ts-jest/presets/js-with-babel-esm',
testEnvironment: 'node',
transformIgnorePatterns: ['/node_modules/(?!(hex\-rgb|rgb\-hex)/)']
};
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
require
。 - evolutionxboxNODE_OPTIONS='--experimental-vm-modules' jest
来支持。请参见 https://dev59.com/vlsV5IYBdhLWcg3w0hlU#61652773。 - Raine Revere