用 Jest 测试 ES6 模块

Posted

技术标签:

【中文标题】用 Jest 测试 ES6 模块【英文标题】:Test ES6 modules with Jest [duplicate] 【发布时间】:2018-09-14 08:26:48 【问题描述】:

如何使。


例子:

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);
);

【问题讨论】:

【参考方案1】:

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


第 1 步:

test 环境添加到项目根目录下的.babelrc


  "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 属性中通知其他选项。

【讨论】:

这个答案可能已经过时了,GarouDan的答案是officially suggested solution GarouDan 的答案不是官方建议的 ES6 模块解决方案,而是针对 Typescript 场景。它们不是一回事。 虽然 GarouDan 的解决方案包括 typescript 支持,但在我提供的链接之后显示了没有 typescript 的有据可查的 Jest ES6 实现,GarouDan 的解决方案就是从中派生的。支持打字稿所需的更改可以忽略不计,但我同意这与问题无关。【参考方案2】:

上面的解决方案对我不起作用。我能够解决这个问题:

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

Reference.

【讨论】:

以上是关于用 Jest 测试 ES6 模块的主要内容,如果未能解决你的问题,请参考以下文章

无法在基于 jest 和 vue-test-utils 的测试项目中使用 vue.js 的 ES6 模块

使用 React、Typescript 和 ES6 进行 Jest 测试

Jest Manual Mocks with React 和 Typescript:模拟 ES6 类依赖

Jest 是不是支持 ES6 导入/导出?

带有 ES6 模块的 babel-jest

jest + typescript + es6 模块(又一次,2019 年)- SyntaxError: Unexpected token export