有哪些JavaScript测试框架支持ES模块?

26

有哪些测试框架支持使用新的ES模块语法进行测试?我有一个JS应用程序,其中大量使用了具有ES模块的.mjs文件。我尝试过Jest和Jasmine,但在尝试为我的应用程序编写运行测试时,两者都会抛出错误。我需要测试这个文件:

math.mjs

export function add(a, b) {
  return a + b;
}

1
Vitest 是以 ESM 为先的,并且具备 TypeScript 支持。它还可以直接使用:https://vitest.dev/guide/features.html - aderchox
5个回答

12

5
Jest v.26对测试原生ES模块的支持是实验性的,而且相当有限。虽然可能足以测试ESM代码,但像插件这样的东西仍需要使用.cjs解决方案。v27扩展ESM支持的重点似乎是一个艰巨的目标。https://github.com/facebook/jest/milestone/12 - akauppi
1
Jest 27.5仍然具有实验性的ESM支持--支持应在此处跟踪:https://github.com/facebook/jest/issues/9430 - Capi Etheriel
28在alpha版本中 https://github.com/facebook/jest/releases 。我开始使用它,并且能够撤回关于模块的黑客攻击。 :) - akauppi
Mocha在支持方面有些虚假:如果您有任何配置(.mocharc.js.mocharc.cjs.mocharc.json),它会将Mocha放入CommonJS模式,从而破坏所有的import语句。因此,如果您没有任何配置,或者想要通过命令行参数执行所有配置,则可以与ESM一起使用。 - machineghost
1
Vitest刚刚运行了,甚至不需要配置任何东西。 - Hawxby

6

其他支持ES模块的测试运行器有:


我在我的回答中添加了 AVA 和 UVU 的更新信息,感谢您的贡献。我认为这应该是一个维基问题。 - Capi Etheriel

5

我尝试了Vitest,它非常好用。我的目标是使用typescript构建可发布的库。该库是monorepo的一部分,使用Nx构建,并在package.json中设置了"type": "module",在我的tsconfig.json文件中添加了以下内容:


 "compilerOptions": {
    "module": "ESNext",
    "target": "ES6",
    "moduleResolution": "node"
}

它可以在0配置的情况下工作,我尝试测试使用第三方包中的CJS和ESM类型导入的函数。

顺便说一下,我真的很喜欢这种简洁的语法。此外,vitest还支持测试使用React/Vue构建的组件。


这个救了我(使用 vite 的 solidJS 项目) - Tom McKenzie

2
您可以使用esm包与Jasmine一起使用。不确定Jest是否支持。 math.spec.js
import { add } from './math.mjs';

describe('Add', () => {
  it('should add 3 and 2', () => {
    expect(add(3,2)).toBe(5);
  });
});

安装和运行

$ yarn global add jasmine esm
$ jasmine --require=esm
Randomized with seed 44366
Started
.
1 spec, 0 failures
Finished in 0.004 seconds

1
对于jest,你可以使用babel。 - bonusrk
1
将ES模块转换为CommonJS并不等同于支持ES模块... - Capi Etheriel
什么将 ES 模块转换为 Common JS? - Justin
我猜你是对的?esm只是在模块加载时进行了一些黑科技,它并没有真正转换任何东西... 对吗? - Capi Etheriel

1
该项目Japa与ESM和TypeScript兼容,在我的设置中(使用Node.js 16.x以及"type": "module".js文件),运行完美。我只遇到了一个问题,但很容易解决,你应该试试。

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