我正在尝试测试一个需要导入es6模块的文件,如下所示:https://repl.it/HG9t/0看来我错过了一些配置,使它正常工作。如果你能用另一个单元测试框架轻松地实现这一点,我也很感兴趣。预先感谢你的帮助。
kq4fsx7k1#
1.安装所需的依赖项:yarn add --dev babel-jest @babel/core @babel/preset-env或npm install --save-dev babel-jest @babel/core @babel/preset-env1.在您的主文件夹中创建babel.config.js并粘贴到那里:
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', }, }, ], ], };
1.确保package.json和jest.config.js中的所有jest设置都设置为默认值。
package.json
jest.config.js
dsekswqp2#
由于节点不支持模块,你必须使用Babel来编译你的文件。看看如何配置Jest和Babel的文档
gwbalxhn3#
我有一个类似的问题与npm包'rgb-hex'和'hex-rgb',因为他们的主要出口是在ES6格式。我使用了一个Typescript项目与Jest。我认为错误来自Jest结束,而不是Typescript,因为Jest在正确翻译的javascript上工作(根据它自己的配置)。根本问题是这些ES6风格的主导出会导致Jest出现问题(不是tsc或Typescript链),因为你需要告诉Jest去transile。我使用包“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)/)'] };
注意:根据“ts-jest”的文档,在你想要使用esm的时候,预设设置是很重要的。cjs(完全是香草味的,但包括在内,我认为是必要的)
module.exports = { presets: [['@babel/preset-env', {targets: {node: 'current'}}]], };
请注意node_modules中的忽略模式。您在regex中使用了否定运算和分组来告诉它“除了这些特定的包模式之外,是的,忽略node_modules以进行传输”。Jest中出现这种忽略模式的原因是node_modules中的包通常不使用来自其主文件index.js文件的ES6导出Jest通常不会转换它们,因为那样的话它就必须扫描所有的node_modules,所以你可以使用这些忽略模式(带有一些违反直觉的正则表达式)来转换node_modules中的特定内容。编辑:.cjs扩展名是因为我的整个项目使用的是package.json中的"type": "module"。如果你把这些文件保留为.js,你会得到一个非常描述性的错误。.cjs扩展名告诉Node放松,只使用他们框架使用的当前规范格式的配置(这不是ES6... lol JS永远不会改变)
"type": "module"
3条答案
按热度按时间kq4fsx7k1#
1.安装所需的依赖项:
yarn add --dev babel-jest @babel/core @babel/preset-env
或
npm install --save-dev babel-jest @babel/core @babel/preset-env
1.在您的主文件夹中创建
babel.config.js
并粘贴到那里:1.确保
package.json
和jest.config.js
中的所有jest设置都设置为默认值。dsekswqp2#
由于节点不支持模块,你必须使用Babel来编译你的文件。看看如何配置Jest和Babel的文档
gwbalxhn3#
我有一个类似的问题与npm包'rgb-hex'和'hex-rgb',因为他们的主要出口是在ES6格式。我使用了一个Typescript项目与Jest。我认为错误来自Jest结束,而不是Typescript,因为Jest在正确翻译的javascript上工作(根据它自己的配置)。根本问题是这些ES6风格的主导出会导致Jest出现问题(不是tsc或Typescript链),因为你需要告诉Jest去transile。
我使用包“ts-jest”找到了一个可用的配置,基于简单的预设(唯一需要注意的是忽略模式),具有以下配置:
tsconfig.json:
jest.config.cjs
注意:根据“ts-jest”的文档,在你想要使用esm的时候,预设设置是很重要的。
cjs(完全是香草味的,但包括在内,我认为是必要的)
请注意node_modules中的忽略模式。您在regex中使用了否定运算和分组来告诉它“除了这些特定的包模式之外,是的,忽略node_modules以进行传输”。Jest中出现这种忽略模式的原因是node_modules中的包通常不使用来自其主文件index.js文件的ES6导出Jest通常不会转换它们,因为那样的话它就必须扫描所有的node_modules,所以你可以使用这些忽略模式(带有一些违反直觉的正则表达式)来转换node_modules中的特定内容。
编辑:.cjs扩展名是因为我的整个项目使用的是package.json中的
"type": "module"
。如果你把这些文件保留为.js,你会得到一个非常描述性的错误。.cjs扩展名告诉Node放松,只使用他们框架使用的当前规范格式的配置(这不是ES6... lol JS永远不会改变)