首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Blanket.js

运行Blanket.js
EN

Stack Overflow用户
提问于 2015-12-17 02:37:44
回答 3查看 1.2K关注 0票数 25

我正在以编程方式测试一些代码,使用Node中的Jasmine。为此,我设置了以下内容:

代码语言:javascript
复制
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。我的问题是,如何以编程方式输出代码覆盖率结果?使用上面的代码,我得到一个错误。错误简单地说:

代码语言:javascript
复制
Error: Bad file instrument indicator.  Must be a string, regex, function, or array.

为什么?我做错了什么?

更新

在我的package.son文件中,我有以下部分:

代码语言:javascript
复制
"config": {
  "blanket": {      
    "data-cover-flags": {
      "engineOnly":true
    }
  }      
}

我已经更新了我的runTests函数如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
'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-test/tests.js“的子目录中。当运行上述代码时,永远不会调用customerReporter代码。我不明白为什么。

EN

回答 3

Stack Overflow用户

发布于 2015-12-23 16:25:53

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

如果您没有在package.json中指定下面的内容,则毯子会抛出一个“坏文件仪表指示符。必须是字符串、正则表达式、函数或数组。”错误。只要你需要(‘毯子’);从节点内的任何地方。

代码语言:javascript
复制
  "scripts": {
    "blanket": {
      "data-cover-flags": {
        "engineOnly":true
      }
    }
  }
票数 8
EN

Stack Overflow用户

发布于 2015-12-23 16:21:14

似乎你需要把记者添加到茉莉花的环境中。

代码语言:javascript
复制
jasmine.getEnv().addReporter(reporter);

来源:reporter.html

票数 3
EN

Stack Overflow用户

发布于 2015-12-21 15:35:46

尝试自定义报告器browser.md#reporters

代码语言:javascript
复制
blanket.customReporter=function(coverage_results){
    console.log(coverage_results);
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34325711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档