使用karma和webpack进行单元测试:_karma_webpack_ - 没有这样的文件或目录

时间:2016-04-02 16:23:41

标签: karma-runner webpack karma-coverage

我正在尝试使用coverage(使用karma-coverage)和webpack(使用karma-webpack)运行单元测试。测试按预期运行,但要生成覆盖率报告,需要加载实际源文件(而不是测试)并通过coveragewebpack预处理器传递。

不幸的是,这失败并出现以下错误:

ERROR [karma]: { [Error: no such file or directory]
  code: 'ENOENT',
  errno: 34,
  message: 'no such file or directory',
  path: '/_karma_webpack_/views/Foo/Foo.js' }
Error: no such file or directory

Foo.js是包含源的文件。目录结构如下:

karma.conf.js
  - src/
      - js/
        - views/
            - Foo/
                - Foo.js
                - test/
                    - FooTest.js

karma.conf.js

module.exports = function (config) {
  config.set({
    basePath: 'src/js/',

    frameworks: ['jasmine'],

    files: [
      '**/test/*Test.js',
      '**/Foo.js',
    ],

    exclude: [],

    preprocessors: {
      '**/test/*Test.js': ['webpack'],
      '**/Foo.js': ['webpack', 'coverage'],
    },

    coverageReporter: {
      type: 'html',
      dir: 'coverage',
    },

    webpack: {
      resolve: {
        alias: [
          { _karma_webpack_: 'src/js' },
        ],
      },

    },

    reporters: ['progress', 'coverage'],

    port: 9876,

    colors: true,

    logLevel: config.LOG_DEBUG,

    autoWatch: true,

    browsers: ['Chrome'],

    singleRun: false,

    concurrency: Infinity,
  });
};

问题是明显的:路径/_karma_webpack_/views/Foo/Foo.js确实不存在。我想这是一些内部路径,但我怎么能改变这个呢?

正如您所看到的,我已经尝试使用webpack resolve选项,但它无效。由于错误消息指出ERROR [karma],我也有点担心这个错误可能会有所不同。

另外,我怀疑可能是斑点模式**/Foo.js已关闭,但在那里尝试一些更改(如**/**/Foo.js)也无济于事。

1 个答案:

答案 0 :(得分:9)

我有同样的问题。事实证明,我需要离开karma_webpack文件夹,而不是

preprocessors: {
  '**/test/*Test.js': ['webpack'],
  '**/Foo.js': ['webpack', 'coverage'],
},

尝试

preprocessors: {
  '../**/test/*Test.js': ['webpack'],
  '../**/Foo.js': ['webpack', 'coverage'],
},