2017-01-10 10 views
1

У меня есть приложение ES6 (Aurelia), в котором я запускаю модульные тесты для использования karma с webpack и babel. Я могу генерировать исходные карты для файлов , но не для приложения . Моя karma.config содержит что-то вроде этого:Создание исходных кодов для кода приложения с использованием кармы и webpack

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 ссылок из preprocessors ничего не делает).

Как загрузить эти исходные карты?

ответ

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 } })] 
    ), 

To:

...(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.config или spec-bundle

EDIT:

Я модернизированной этот проект 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 
1

Вы должны изменить в webpack.config.ts файлов, эта строка:

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

в

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

Я использую ES6, не машинопись. И у меня есть следующее в моей 'webpack.config.babel.js': \t 'ENV === 'test' || ENV === 'development' \t? envDev ({devtool: 'inline-source-map', debug: true}) \t: envProd ({}) ', который не влияет на то, какие исходные карты загружаются при выполнении тестов – yammerade