Запуск Blanket.js
Я тестирую программный код с помощью Jasmine с Node. Для этого я установил следующее:
function runTests() {
var Jasmine = require('jasmine');
var jasmine = new Jasmine();
jasmine.loadConfig({
spec_dir: 'unit-tests',
spec_files: [
'tests-*.js'
]
});
var blanket = require('blanket')();
var TerminalReporter = require('jasmine-terminal-reporter');
var reporter = new TerminalReporter({});
jasmine.addReporter(reporter);
jasmine.execute();
}
runTests();
Когда эти тесты выполняются, я хотел бы получить информацию о покрытии кода. При попытке этого я наткнулся на blanket.js. Мой вопрос: как я программно выдаю результаты покрытия кода? Используя приведенный выше код, я получаю сообщение об ошибке. Ошибка просто говорит:
Error: Bad file instrument indicator. Must be a string, regex, function, or array.
Почему? Что я делаю не так?
Обновление
В моем файле package.son у меня есть следующий раздел:
"config": {
"blanket": {
"data-cover-flags": {
"engineOnly":true
}
}
}
Я обновил мою функцию runTests
, чтобы выглядеть так:
function runTests() {
var Jasmine = require('jasmine');
var jasmine = new Jasmine();
jasmine.loadConfig({
spec_dir: 'unit-tests',
spec_files: [
'tests-*.js'
]
});
// Setup the coverage reporter
var blanket = require("blanket")();
var blanketReporter = function(coverageData) {
console.log(coverageData);
};
blanket.customReporter = blanketReporter;
blanket.instrument({
inputFile: 'library.js'
}, function(result) { });
var TerminalReporter = require('jasmine-terminal-reporter');
var reporter = new TerminalReporter({});
jasmine.addReporter(reporter);
jasmine.execute();
}
library.js
'use strict';
class Processor
{
execute(vals) {
let result = 0;
vals.forEach(function(v) {
result += v;
});
return result;
}
}
module.exports = Processor;
Код выше находится в файле с именем main.js, который я запускаю, вызывая node main.js
из окна консоли. "library.js" находится на одном уровне, а тесты находятся в дочернем каталоге в "./unit-tests/tests.js". Когда это выполняется, код customerReporter никогда не вызывается. Я не понимаю, почему.
Ответы
Ответ 1
https://github.com/alex-seville/blanket/issues/248
Если вы не укажете ниже в своем пакете. json, то одеяло выдает "индикатор инструмента плохих файлов. Должен быть строка, регулярное выражение, функция или массив". ошибка. Как только вы захотите ( "одеяло" ); из любого места в пределах node.
"scripts": {
"blanket": {
"data-cover-flags": {
"engineOnly":true
}
}
}
Ответ 2
Казалось бы, вам нужно добавить репортера в среду Jasmine.
jasmine.getEnv().addReporter(reporter);
Источник: http://jasmine.github.io/2.1/custom_reporter.html
Ответ 3
Попробуйте пользовательский репортер https://github.com/alex-seville/blanket/blob/master/docs/advanced_browser.md#reporters
blanket.customReporter=function(coverage_results){
console.log(coverage_results);
};