【问题标题】:Requiring test files with webpack for use with mocha or similar需要带有 webpack 的测试文件以用于 mocha 或类似的
【发布时间】:2017-07-01 16:14:01
【问题描述】:

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

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

$ 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');
...

似乎达到了想要的效果,但是测试文件有数百个,要手动导入或者要求每个都显得很麻烦。

【问题讨论】:

    标签: ruby-on-rails testing webpack mocha.js


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2014-02-20
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      相关资源
      最近更新 更多