Istanbul-instrumenter-loader: проблемы с покрытием не соответствуют источнику

Я использую istanbul-instrumenter-loader, чтобы попытаться сгенерировать отчеты о покрытии кода для моего непереведенного кода es6, и пока все работает нормально, проблемы сообщенный в сгенерированном HTML-выходе, похоже, не соответствует реальному источнику.

Например:

Неверный выход покрытия

(в случае удаления изображения) В объявлении const есть 3 слова "if if not coated" после него, даже если после этой строки нет такой инструкции или какого-либо кода. Иногда выражение "не охватывается" помечено в середине строки или в объявлении объекта или в нескольких операторах и т.д. И т.д.

Здесь мой конфигурационный файл Karma:

module.exports = function(config) {
    config.set({
        basePath: '../../',
        frameworks: [ 'qunit' ],

        files: [
            'test/index.js',

            // Session tickets
            { pattern: 'test/tickets/*.json', watched: true, included: false, served: true }

        ],

        preprocessors: {
            'test/index.js': 'webpack'
        },
        webpack: {
            module: {
                rules: [{
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loaders: ['istanbul-instrumenter-loader', 'babel-loader']
                },
                {
                    test: /\.vue$/,
                    loaders: ['vue-loader']
                },
                {
                    test: /\.png$/,
                    loaders: ['url-loader']
                }]
            }
        },
        reporters: [ 'coverage-istanbul', 'progress' ],
        coverageIstanbulReporter: {
            type: 'html',
            dir: './coverage'
            fixWebpackSourcePaths: true
        },
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: [ 'Chrome' ],
        browserNoActivityTimeout: 30000,
        singleRun: true,
        concurrency: Infinity,
        client: {
            captureConsole: true
        },
        browserConsoleLogOptions: {
            terminal: true,
            level: ''
        }
    })
};

Ответ 1

Карма-покрытие и карма-webpack, похоже, работают вместе

"karma": "^0.12.28",
"karma-coverage": "^0.2.7",
"karma-sourcemap-loader": "^0.3.2",
"karma-webpack": "^1.3.1",
"webpack": "^1.4.14"

Вы правильно настроили, вы можете получить здесь больше https://github.com/webpack-contrib/istanbul-instrumenter-loader

и может предоставить образец для вашего js файла/spec

Ответ 2

У меня была аналогичная проблема и решил ее, запустив istanbul-instrumenter-loader до babel-loader.

Вам нужно будет заменить:

{
    test: /\.js$/,
    exclude: /node_modules/,
    loaders: ['istanbul-instrumenter-loader', 'babel-loader']
}

с:

{
    test: /\.js$/,
    exclude: /node_modules/,
    use: [
        {
            loader: 'babel-loader'
        },
        {
            loader: 'istanbul-instrumenter-loader',
            options: {
                esModules: true
            }
        }
    ]
}