Как создать отчет LCOV на основе Jasmine SpecRunner.html?

Мы используем Jasmine для наших модульных тестов JavaScript. У нас есть файл SpecRunner.html для запуска тестов. Существует ли инструмент, к которому я могу передать путь к SpecRunner.html и путь к каталогу файлов JavaScript (а не спецификаций), и он будет генерировать отчет LCOV. Например, что-то вроде этого:

phantomjs jasmine_lcov.js SpecRunner.html WebContent/js

Ответы

Ответ 1

Я согласен с @zaabalonso, что Karma является правильным выбором. Поскольку вам нужны отчеты LCOV, вам также понадобится плагин karma-coverage и предполагается, что вы хотите запускать безглавых в CI, вы, вероятно, захотите karma-phantomjs-launcher. Выполнение через Grunt необязательно, поскольку вы всегда можете запускать карму непосредственно из командной строки с помощью karma-cli (npm install -g karma-cli).

Базовая установка (с requireJS) выглядит примерно так:

package.json

{
  "private": "true",
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-jasmine-node": "^0.3.1",
    "grunt-karma": "^0.10.1",
    "jasmine-core": "^2.3.4",
    "karma": "^0.12.32",
    "karma-coverage": "^0.3.1",
    "karma-jasmine": "^0.3.5",
    "karma-phantomjs-launcher": "^0.1.4",
    "karma-requirejs": "^0.2.2",
    "requirejs": "^2.1.17"
  }
}

karma.conf.js (обратите внимание на разделы preprocessors и coverageReporter

module.exports = function(config) {
  config.set({
  basePath: '.',
  frameworks: ['jasmine', 'requirejs'],
  files: [{
        pattern: 'src/**/*.js',
        included: false
      }, {
        pattern: 'spec/**/*.js',
        included: false
      },
      "test-main.js"],

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

  reporters: ['progress', 'coverage'],

  coverageReporter: {
    // specify a common output directory
    dir: 'build/reports/coverage',
    reporters: [
      { type: 'lcov', subdir: 'report-lcov' },
      { type: 'lcovonly', subdir: '.', file: 'report-lcovonly.txt' }
    ]
  },

  browsers: ['PhantomJS']
  });
};

тест-main.js

var allTestFiles = [];
var TEST_REGEXP = /^\/base\/spec\/\S*(spec|test)\.js$/i;

var pathToModule = function (path) {
    return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};

Object.keys(window.__karma__.files).forEach(function (file) {
    if (TEST_REGEXP.test(file)) {
        // Normalize paths to RequireJS module names.
        allTestFiles.push(pathToModule(file));
    }
});

require.config({
    // Karma serves files under /base, which is the basePath from your config file
    baseUrl: '/base/',
    enforceDefine: true,
    xhtml: false,
    waitSeconds: 30,

    // dynamically load all test files
    deps: allTestFiles,
    callback: window.__karma__.start
});

Gruntfile.js (Необязательно, если вы хотите использовать Grunt)

module.exports = function(grunt) {
  grunt.initConfig({
    karma: {
      unit: {
        configFile: 'karma.conf.js',
        options: {
          singleRun: true
        }
      }
    }
  });
  grunt.loadNpmTasks('grunt-karma');
  grunt.registerTask('default', ['karma:unit']);
};

Вы можете запустить командную строку тестов с помощью karma start. Это запустит сервер кармы и запустит тесты один раз. Он будет поддерживать сервер и будет повторно запускать тесты в любое время, когда вы измените источник или источники тестирования. Если вы хотите запустить тест только один раз (возможно, в CI), вы просто запускаете karma start --single-run.

Ответ 2

Chutzpah также сделает это. Однако он ориентирован на платформу Windows, так что может работать или не работать для вас. Вот полный вариант командной строки documentation, но ваша команда может быть примерно такой:

chutzpah.console.exe SpecRunner.html /coverage /lcov coverage.dat

Если вам нужна тонкая настройка таких вещей, как исключение охвата или ссылки, и т.д., вы можете использовать файлы конфигурационных файлов json в области, где тесты описаны, как описано здесь. Нет необходимости указывать местоположение кода Javascript под тестом в командной строке, поскольку это автоматически определяется ссылками в SpecRunner.html.

Я нашел Chutzpah очень гладким и простым в использовании.

Ответ 3

Мы используем Karma за грубой настройкой:

  options = {
        karma: {
            unit: {
                options: {
                    files: ['test/unit/specs/*.js'],
                    reporters: ['progress', 'coverage'],
                    preprocessors: {
                        'src/js/*.js': ['coverage']
                    },
                    coverageReporter: {
                        type : 'html',
                        dir : 'build/coverage/'
                    },
                    frameworks: ['jasmine'],
                    singleRun: true
                }
            }
        }
}

вы не указываете

SpecRunner.js

но вы можете указать *.js для всех ваших файлов spec.

вы можете запустить его с помощью

grunt karma

который будет генерировать ваш отчет, аналогичный показанному вами.