要求使用webpack的测试文件与mocha或类似的一起使用

时间:2017-02-13 15:49:14

标签: ruby-on-rails testing webpack mocha

我正在尝试使用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;

现在这个工作,并生成一个bundle,比如tests.js,我可以传递给mocha:

$ mocha tests.js

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

将我的切入点更改为:

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

似乎有所需的效果,但有数百个测试文件,手动导入或需要每个测试文件似乎很麻烦。

1 个答案:

答案 0 :(得分:0)

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

解决这个问题的一种方法是将编译器选项传递给mocha,它将使用babel。可以在this blog post上找到更详细的说明。一般的想法是运行带有--compilers js:babel-core/register的mocha,它会找到您的.babelrc文件。

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

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