使用karma和webpack为应用程序代码生成源图

时间:2017-01-10 16:28:16

标签: webpack karma-runner karma-jasmine aurelia

我有一个ES6(Aurelia)应用,我正在使用karmawebpackbabel进行单元测试。我能够为 test 文件生成源映射,但不能为应用程序文件生成源映射。我的karma.config包含以下内容:

module.exports = function (config) {
  config.set({

    basePath: __dirname,

    frameworks: ['jasmine'],

    exclude: [],

    files: [
      { pattern: 'spec-bundle.js', watched: false }
    ],

    preprocessors: {
      'spec-bundle.js': ['webpack', 'sourcemap']
    },

    webpack: require('../webpack.config.babel'),

    webpackServer: { noInfo: true },

    ...
  });
}

我的规范文件被提取到spec-bundle,如下所示:

Error.stackTraceLimit = Infinity;

require('aurelia-bootstrapper-webpack');

var testContext = require.context('./unit', true, /\.spec\.(ts|js)$/);

function requireAll(requireContext) {
  return requireContext.keys().map(requireContext);
}

var modules = requireAll(testContext);

我的测试的源映射已正确加载,但我无法获取要加载的应用程序文件的源映射。此外,我无法将测试文件的源地图加载到,因此我甚至不确定是什么打开它们(从{{删除sourcemaps引用1}}什么也没做。)

如何加载这些源地图?

2 个答案:

答案 0 :(得分:1)

您必须更改文件webpack.config.ts,此行:

    envDev(ENV !== 'test' ? {} : {devtool: 'inline-source-map'}) :

    envDev(ENV === 'test' ? {} : {devtool: 'inline-source-map'}) :

答案 1 :(得分:1)

这是istanbul中的错误,这就是我修复它的方法:

npm中更新了我的package.json任务:

"test": "cross-env BABEL_ENV=node NODE_ENV=test ./node_modules/karma/bin/karma start test/karma.conf.js",
"test:debug": "npm test -- --single-run=false --debug"

为:

"test": "cross-env BABEL_ENV=node NODE_ENV=test ./node_modules/karma/bin/karma start test/karma.conf.js",
"test:debug": "set mode=debug&&npm test -- --single-run=false --debug"

然后,在我的webpack.config.babel中,将其更改为:

...(ENV === 'production' || ENV === 'development'
    ? [commonChunksOptimize({ appChunkName: 'app', firstChunk: 'aurelia-bootstrap' })]
    /* ENV === 'test' */
    : [generateCoverage({ options: { 'force-sourcemap': true, esModules: true } })]
    ),

致:

...(ENV === 'production' || ENV === 'development'
    ? [commonChunksOptimize({ appChunkName: 'app', firstChunk: 'aurelia-bootstrap' })]
    /* ENV === 'test' */
    : process.env.mode === "debug" ? [] /* coverage breaks inline source maps */
        : [generateCoverage({ options: { 'force-sourcemap': true, esModules: true } })]
    ),

generateCoverage的最高位置import generateCoverage from '@easy-webpack/config-test-coverage-istanbul'

我没有对karma.configspec-bundle

进行任何更改

修改

我将此项目升级到Webpack版本2,后者不再支持yargs,因此我无法将debug arg传递给它。为了解决方法,我在istanbul级别关闭了karma。在我的karma.conf.js

webpack: require('../webpack.config')({ coverage: !config.debug }),

和我更新的脚本:

karma start test/karma.conf.js --single-run=false --debug=true