如何编写支持Javascript 6模块的单元测试

时间:2017-08-18 05:59:29

标签: javascript unit-testing ecmascript-6

我的Javascript代码库基于新的ES6 Modules

所以我有这样的Javascript文件,例如:

export class MyClass {
  constructor() {
    this.list = [];
  }

  add(el) { this.list.push(el); }
}

作为一个模块,我将此文件导入其他Javascript文件,如下所示:

import * as lists from "./myclass";

在HTML页面中,必须使用以下语法:

<script src="myclass.js" type="module"></script>

单元测试

我需要一个测试代码的框架。问题是我使用的是Javascript 6模块,因此像karma这样的现代框架在导入文件时不会出现问题:

module.exports = function(config) {
  config.set({
    files: [
      'src/**/*.js',
      'test/**/*.js'
    ],
    ...
  })
}

以上是karma.conf.js的示例。在Karma的特定情况下,运行器不会将文件作为模块导入,因此页面中的注入失败。

我可以使用哪些单元测试框架来测试Javascript 6模块?

3 个答案:

答案 0 :(得分:2)

我使用Mocha和Babel的组合--Babel将ES6模块转换为Mocha可以使用的代码,因此您可以在测试文件中使用import

使用Babel开发者运行mocha:

mocha --compilers js:babel-core/register --recursive test/*

我非常确定其他框架也有类似的解决方案。

答案 1 :(得分:1)

你可以查看Jest,它是Facebook的测试框架,允许你在Node上运行你的测试(JSDOM)。

它在没有浏览器的情况下并行运行测试,因此假设速度更快。

答案 2 :(得分:0)

我不确定Jest是否真的支持模块,对吧?即我想要我的测试文件..那些带有断言的..能够导入同样导入其他模块的模块。

使用基于节点的测试框架似乎是最好的,我认为可能就是所有这些,我们是非常糟糕的babel / webpack特技,我真的不想使用它。

无头的Chrome肯定有趣,Puppeteer也是如此。