运行Blanket.js

25

我正在使用来自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.json 文件中,我有以下部分:
"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代码从未被调用。 我不明白为什么。

使用Jasmine测试运行器的说明。请参考以下链接:https://github.com/alex-seville/blanket/blob/v1.1.7/docs/intermediate_browser.md。 - approxiblue
仍然无法在Node中运行Blanket。 - xam developer
library.js 是什么样子? - edin-m
@EdinM,library.js非常基础。我已经将它包含在上面了。我尝试隔离问题,所以我将其简化到了上面的内容。 - xam developer
3个回答

8

https://github.com/alex-seville/blanket/issues/248

如果在您的package.json文件中未指定以下内容,blanket会抛出一个“Bad file instrument indicator. Must be a string, regex, function, or array.”错误。只要您在node中从任何地方require('blanket');即可。
  "scripts": {
    "blanket": {
      "data-cover-flags": {
        "engineOnly":true
      }
    }
  }

所以,即使我这样做了,我仍然看不到代码覆盖率。我添加了 var blanket = require("blanket")({ "pattern": "/unit-tests/" }); blanket.instrument({}, function(result) { console.log(result); }); 但是,我看到一个错误,说:TypeError: Cannot read property 'replace' of undefined。我很困惑。 - xam developer
我只使用过一次 blanket(还有 mocha 单元测试)。我记得唯一棘手的部分在于配置文件(我相信是 package.json 文件)。从 blanket 页面上可以看到 require("blanket")({ /* 可选选项 */ });。 - Tim
抱歉,我目前正在旅行中没有带电脑 - 我想你已经知道了,但这是官方网站:http://blanketjs.org。 - Tim
谢谢你的分享。你说得对,配置文件应该放在package.json中。你也说得对,有一个blanketjs页面。我已经仔细查看了每一个内容,但是我仍然遇到了问题。这让我想知道是否有什么变化没有被记录或类似的情况。不过还是非常感谢你的回复,特别是在假期期间。 - xam developer
刚刚回顾了一下如何使用Blanket生成报告。我使用以下内容作为起点(从blanketjs.org页面链接而来): https://github.com/alex-seville/blanket/blob/master/docs/getting_started_node.md我将以下package.json文件直接放在我的项目根目录中: { "config": { "blanket": { "pattern": [ "directoryContainingCodeNeedingCoverageReport" ], "data-cover-never": [ "node_modules", "tests" ] } } }我使用以下命令行参数运行mocha(不是jasmine): mocha -R html-cov -r blanket <js file that runs tests> - Tim
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - xam developer

3
似乎您需要将报告者添加到Jasmine环境中。
jasmine.getEnv().addReporter(reporter);

来源:http://jasmine.github.io/2.1/custom_reporter.html

这是一个关于自定义测试报告的文档。在 Jasmine 中,我们可以通过编写自定义测试报告来更好地展示测试结果。这个文档提供了一些有用的指导和示例来帮助你创建自己的自定义测试报告。

1

不幸的是,这种方法对我不起作用。我在我的问题中添加了您的代码,位于“TerminalReporter..”行之上。因此,以下块已添加://设置覆盖率报告 var blanket = require('blanket')(); blanket.customReporter = function(coverage_results){ console.log(coverage_results); }; 现在我收到一个错误,说:“错误:坏文件仪器指示器。必须是字符串、正则表达式、函数或数组。”我做错了什么?customReporter是一个函数。 - xam developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接