需要带有 webpack 的测试文件才能与摩卡或类似产品一起使用



我正在尝试使用 webpack 将测试捆绑到一个可以直接传递给 mocha 的包中。我的 webpack 配置看起来像这样:

module.exports = {
  entry: ...,
  output: ...,
  module: {
    rules: [
      {
        test: /.jsx?(.erb)?$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          presets: [
            'react',
            [ 'latest', { 'es2015': { 'modules': false } } ]
          ]
        }
      }
    ]
  },
  plugins: [],
  resolve: {
    extensions: [ '.js', '.jsx' ],
    modules: [
      path.resolve('../app/javascript'),
      path.resolve('../vendor/node_modules')
    ]
  },
  resolveLoader: {
    modules: [ path.resolve('../vendor/node_modules') ]
  }
}

(从 https://github.com/rails/webpacker 开始(

我的入口点如下所示,我在其他地方看到了引用:

var context = require.context('../path/to/tests', true, /.+.test.js?$/);
context.keys().forEach(context);
module.exports = context;

现在这可以工作了,并产生了一个捆绑包,比如测试.js,我可以传递给摩卡:

$ mocha tests.js

但是,这使得 webpack 每次更改某些内容时都会重新编译所有测试文件,这真的很慢。对于我的应用程序代码,我使用常规导入语句导入模块,webpack 只重新编译已更改的文件。

将我的入口点更改为以下内容:

require('../path/to/tests/foo.test.js');
require('../path/to/tests/bar.test.js');
require('../path/to/tests/baz.test.js');
...

似乎具有预期的效果,但是有数百个测试文件,并且必须手动导入或要求每个文件似乎很麻烦。

Webpack 正在重新编译您的测试,因为您使用的是 require.context .使用它的文档在这里。通常,当使用摩卡运行一系列测试时,您只需使用mocha ../path/**.test.js即可运行所有测试。当然,如果您使用的是 Node 不支持的 js 新功能,这将不起作用。

解决这个问题的一种方法是将编译器选项传递给 mocha,它将在引擎盖下使用 babel。更详细的解释可以在这篇博文中找到。一般的想法是使用--compilers js:babel-core/register运行mocha,以找到您的.babelrc文件。

如果您使用的是 mac 或 linux,则可以使用以下命令来编写 bash 表达式,以便更轻松地查找所有测试。

find ./path -name '*.test.js' | xargs mocha

最新更新