Javascript Running.js
我正在使用节点中的Jasmine以编程方式测试一些代码。为此,我设置了以下各项:Javascript Running.js,javascript,jasmine,blanket.js,Javascript,Jasmine,Blanket.js,我正在使用节点中的Jasmine以编程方式测试一些代码。为此,我设置了以下各项: function runTests() { var Jasmine = require('jasmine'); var jasmine = new Jasmine(); jasmine.loadConfig({ spec_dir: 'unit-tests', spec_files: [ 'tests-*.js'
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();
当这些测试运行时,我希望获得代码覆盖率的详细信息。在尝试这一点时,我意外地发现。我的问题是,如何以编程方式输出代码覆盖率结果?使用上面的代码,我得到一个错误。错误只是说:
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”处于同一级别,测试位于“/unittests/tests.js”的子目录中。当上述操作运行时,将永远不会调用customerReporter代码。我不明白为什么。试试custom reporter
似乎您需要将报告者添加到Jasmine环境中
jasmine.getEnv().addReporter(reporter);
来源:
如果未在package.json中指定以下内容,blanket将抛出“错误的文件工具指示符。必须是字符串、正则表达式、函数或数组。”错误。一旦您需要(“毯子”);从节点内的任何位置
"scripts": {
"blanket": {
"data-cover-flags": {
"engineOnly":true
}
}
}
.仍然无法从节点运行毯子。
library.js
看起来像什么?@EdinM library.js非常基本。我把它包括在上面。我试图孤立这个问题,所以我把它简化为上面的问题。不幸的是,这种方法对我不起作用。我在问题中的TerminalReporter..
行上方添加了您的代码。因此,添加了以下块://设置coverage reporter var blanket=require('blanket')();blanket.customReporter=function(coverage_results){console.log(coverage_results);}代码>我现在得到一个错误,上面写着:错误:坏文件仪器指示器。必须是字符串、正则表达式、函数或数组。
我做错了什么?customReporter是一个函数。因此,即使我这样做,我仍然看不到代码的覆盖范围。我添加了var-blanket=require(“blanket”)({“模式”:“/单元测试/”});工具({},函数(结果){console.log(结果);})代码>但是,我看到一个错误,上面写着:TypeError:无法读取未定义的
的属性“replace”。我很困惑。我只使用过一次毯子(还有摩卡单元测试)。我记得唯一棘手的部分是配置文件(我相信是package.json文件)。从总括页面显示require(“总括”)({/*可选选项*/});很抱歉现在没有我的电脑旅行-我想你已经知道了,但这是总括页面:谢谢分享。正确的说法是,配置内容放在package.json中。还有一个blanketjs页面,这也是正确的。我已经回顾了其中的每一个,但是,我仍然遇到一些问题。这让我想知道是否有什么东西发生了变化,而这些变化没有被记录下来,或者类似的东西。谢谢你的回复。我衷心感谢。特别是在假期里。我刚刚回顾了我是如何得到毛毯来生成报告的。我使用以下内容开始(从blanketjs.org页面链接到):我将以下package.json文件直接放在项目的根目录中:{“config”:{“blanket”:{“pattern”:[“directorycontainingcodeeneedingcoveragereport”],“data cover never”:[“node_modules”,“tests”]}}我对mocha(不是jasmine)使用了以下命令行参数:mocha-rchtmlcov-R
"scripts": {
"blanket": {
"data-cover-flags": {
"engineOnly":true
}
}
}