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

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

Например:

Неправильный вывод покрытия

(на случай, если изображение удалено) Объявление const содержит 3 "если оператор не покрыт" после него, даже если после этой строки нет такого оператора или какого-либо кода. Иногда «оператор не покрыт» помечен в середине строки, или в объявлении объекта, или между несколькими операторами и т. д. и т. д.

Вот мой конфигурационный файл 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: ''
        }
    })
};

person tacospice    schedule 09.06.2017    source источник
comment
Я сталкиваюсь с подобным, все мои коды else не покрыты, а else нет для покрытия. Вы решили это?   -  person Harry Joy    schedule 16.06.2017
comment
@HarryJoy все еще ничего   -  person tacospice    schedule 16.07.2017
comment
Можете ли вы предоставить образец для вашего файла js, а также файл спецификации   -  person gusaindpk    schedule 22.08.2017
comment
У меня такая же проблема с настройкой typescript3/webpack4/karma3   -  person klmdb    schedule 09.11.2018


Ответы (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
            }
        }
    ]
}
person Greg    schedule 24.01.2018

karma-coverage и karma-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

person Monis Majeed    schedule 22.08.2017
comment
Я не знаю, правильно ли я настроил, это часть вопроса. Тем не менее, я опубликовал свою конфигурацию. - person tacospice; 23.08.2017