我正在使用Node中的Jasmine以编程方式测试一些代码.为此,我设置了以下内容:
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代码.我不明白为什么.
https://github.com/alex-seville/blanket/issues/248
如果你没有在package.json中指定下面的内容,则会抛出一个"Bad file instrument indicator.必须是字符串,正则表达式,函数或数组." 错误.一旦你需要('毯子'); 从节点内的任何地方.
"scripts": { "blanket": { "data-cover-flags": { "engineOnly":true } } }