使用Jest测试ES6模块

16

如何使用Jest测试ES6模块。


示例:

sum.js

const sum = function (a, b) {
  return a + b;
}

export default sum;

sum.test.js

import sum from './sum';

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});
2个回答

33

唯一的要求是将您的test环境配置为Babel,并添加es2015转换插件:


步骤1:

在项目根目录下的.babelrc中添加您的test环境:

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}

步骤2:

安装es2015转换插件:

npm install --save-dev @babel/plugin-transform-modules-commonjs

就是这样。 Jest将自动启用从ES模块到CommonJS的编译,无需在package.json中的jest属性中提供附加选项。


2
这个答案可能已经过时了,GarouDan的回答是官方建议的解决方案 - chantey
GarouDan的答案并不是ES6模块的官方建议解决方案,而是针对TypeScript场景的。它们并不是同一回事。 - Paulo Coghi
虽然GarouDan的解决方案包括TypeScript支持,但是根据我提供的链接显示了不带TypeScript的Jest ES6实现,而该实现有很好的文档记录。GarouDan的解决方案是从这个实现派生出来的。支持TypeScript所需的更改很少,但我认为这与问题无关。 - chantey

3

以上的解决方案对我没有起作用。我用以下方法成功解决:

yarn add --dev babel-jest @babel/core @babel/preset-env @babel/preset-typescript

babel.config.js

module.exports = {
    presets: [
        [
            '@babel/preset-env',
            {
                targets: {
                    node: 'current',
                },
            },
        ],
        '@babel/preset-typescript'
    ],
};

我在使用typescript

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接