Aurelia-cli, babel-plugin-istanbul, отчет о покрытии кода Karma всегда возвращает 100%

Всегда 100% покрытие.

Файл karma.conf.js аналогичен тому, что генерирует aurelia-cli.

Я хочу использовать babel-plugin-istanbul для создания отчетов о покрытии кода.

package.json ~~> используемый модуль узла

"babel-plugin-istanbul": "^1.0.3",
"jasmine-core": "^2.4.1",
"karma": "^0.13.22",
"karma-chrome-launcher": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-babel-preprocessor": "^6.0.1",
"karma-coverage": "^1.1.0",
"karma-jasmine-html-reporter": "^0.2.0",
"karma-sinon": "^1.0.5",
"sinon": "^1.17.4"

karma.conf.js (такой же, как сгенерированный aurelia-cli)

"use strict";
const path = require('path');
const project = require('./aurelia_project/aurelia.json');

let testSrc = [
  { pattern: project.unitTestRunner.source, included: false },
  'test/aurelia-karma.js'
];

let output = project.platform.output;
let appSrc = project.build.bundles.map(x => path.join(output, x.name));
let entryIndex = appSrc.indexOf(path.join(output, project.build.loader.configTarget));
let entryBundle = appSrc.splice(entryIndex, 1)[0];
let files = [entryBundle].concat(testSrc).concat(appSrc);

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: [project.testFramework.id, 'sinon'],
    files: files,
    exclude: [],
    preprocessors: {
      [project.unitTestRunner.source]: [project.transpiler.id]
    },
    'babelPreprocessor': { options: project.transpiler.options },
    reporters: ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  });
};

Файл обложки.js

export function cover(done) {
  new Karma({
    configFile: __dirname + '/../../karma.conf.js',
    singleRun: true,
    reporters: ['coverage'],
    preprocessors: {
      'test/unit/**/*.js': ['babel'],
      'src/**/*.js': ['babel']
    },
    coverageReporter: {
      includeAllSources: true,
      reporters: [
        {type: 'html', dir: 'coverage'},
        {type: 'text'}
      ]
    }
  }, done).start();
}

Спасибо


person user2249160    schedule 29.07.2016    source источник


Ответы (2)


Вам не нужно включать тесты в раздел препроцессоров. Итак, удалите первую строку и оставьте только исходный код. Покрытие касается только исходного кода, а не методов тестирования.

preprocessors: {

      'src/**/*.js': ['babel']
    },
person TypeScripter    schedule 30.07.2016

Я вижу, что вам не хватает как минимум препроцессора для покрытия:

preprocessors: {
  'test/unit/**/*.js': ['babel'],
  'src/**/*.js': ['babel', 'coverage']
},

Тем не менее, у меня были аналогичные проблемы даже с этим.

Основная проблема заключается в том, что установка aurelia-cli по умолчанию для кармы использует пакет приложений в качестве источников для запуска тестов. При таком подходе это не инструментируется с использованием isparta.

У меня есть рабочая конфигурация следующим образом:

import gulp from 'gulp';
import {Server as Karma} from 'karma';
import {CLIOptions} from 'aurelia-cli';

let appBundle = "scripts/app-bundle.js";


export function cover(done) {
  new Karma({
    configFile: __dirname + '/../../karma.conf.js',
    singleRun: !CLIOptions.hasFlag('watch'),
    reporters: ['coverage'],
    logLevel: 'debug',
    preprocessors: {
      [project.unitTestRunner.source]: [project.transpiler.id],
      [appBundle]: ['coverage']
    },
    coverageReporter: {
      includeAllSources: true,
      instrumenters: {
        isparta: require('isparta')
      },
      instrumenter: {
        [appBundle]: 'isparta'
      },
      reporters: [
        { type: 'html', dir: '.reports/coverage' },
        { type: 'text' }
      ]
    }
  }, done).start();
}

export default cover;

Имея это на месте, я могу запускать тесты с покрытием. Увы, отчет о покрытии основан на одном файле app-bundle.js, который не дает вам детальных отчетов по каждому исходному файлу. Но этого достаточно, чтобы найти ключевые пробелы в покрытии, для чего я в основном его и использую.

person Carles Barrobés    schedule 05.09.2016
comment
Я видел несколько подходов к получению покрытия кода в Aurelia, и это единственный, который сработал для меня. Благодарю вас! - person Tim Hettler; 23.06.2017