javascript - Jasmine - 使用自定义报告器

标签 javascript jasmine gulp gulp-jasmine

我正在用 Jasmine 测试一些 JavaScript通过Gulp .我想创建自己的记者。在这个时候,我的记者是最基本的。它看起来像这样:

'use strict';

var myCustomReporter = {
    jasmineStarted: function(suiteInfo) {
        console.log('Running suite with ' + suiteInfo.totalSpecsDefined);
        console.log('Reporting via MyCustomReporter');      
    },

    suiteStarted: function(result) {
        console.log('Suite started: ' + result.description + ' whose full description is: ' + result.fullName);     
    },

    specStarted: function(result) {
        console.log('Spec started: ' + result.description + ' whose full description is: ' + result.fullName);
    },

    specDone: function(result) {
    },

    suiteDone: function(result) {
    },

    jasmineDone: function() {
        console.log('Finished suite');
    }   
};

上面的代码本质上就是example custom reporter Jasmine 提供。我的挑战是,我不知道如何让 Jasmine 实际使用它。一些如何,我添加它不正确。我是这样添加的:

 gulp.task('test', function() {
    // Load the reporters to use with Jasmine
    var myReporter = require('./reporters/myCustomReporter');   
    var reporters = [
        myReporter
    ];

    return gulp.src(input.tests)
        .pipe(jasmine({ reporter: reporters }))
    ;
 });

当我通过 Gulp 执行 test 任务时,我得到以下输出:

[08:04:15] Using gulpfile ~/MyProject/gulpfile.js
[08:04:15] Starting 'test'...
[08:04:20] 'test' errored after 5.25 s
[08:04:20] Error in plugin 'gulp-jasmine'
Message:
    Tests failed

如果我在调用 Jasmine 时不传递 { reporter: reporters } ,我的测试运行得很好。我正在尝试学习如何 a) 添加我的记者和 b) 仍然使用默认记者。本质上,我正在尝试弄清楚如何将结果发送给多个记者。我认为我的做法是正确的。显然,结果表明我错了。

最佳答案

首先确保您导出自定义报告器,如 module.exports = myCustomReporter;

基于 gulp-jasmine 的源码,默认的 reporter 没有暴露。相关代码:

var Reporter = require('jasmine-terminal-reporter');
...
module.exports = function(options) {
  ...
  var color = process.argv.indexOf('--no-color') === -1;
  var reporter = options.reporter;

  if (reporter) {
    (Array.isArray(reporter) ? reporter : [reporter]).forEach(function (el) {
      jasmine.addReporter(el);
    });
  } else {
    jasmine.addReporter(new Reporter({
      isVerbose: options.verbose,
      showColors: color,
      includeStackTrace: options.includeStackTrace
    }));
  }
  ...
};

所以你可以像这样添加默认报告者:

gulp.task('test', function() {
    // Load the reporters to use with Jasmine
    var myReporter = require('./reporters/myCustomReporter');   

    var Reporter = require('jasmine-terminal-reporter');
    var defaultReporter = new Reporter({
      isVerbose: false,
      showColors: true,
      includeStackTrace: false
    });

    var reporters = [
        defaultReporter,
        myReporter
    ];

    return gulp.src(input.tests)
        .pipe(jasmine({ reporter: reporters }))
    ;
});

关于javascript - Jasmine - 使用自定义报告器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32423466/

相关文章:

javascript - 识别 Javascript 中的主题标签

javascript:鼠标悬停用于背景着色和不透明度

Angular 4单元测试模板解析错误:

node.js - BrowserSync 连续 GET 使用 Express/Gulp

javascript - Gulp 4 & BrowserSync : Style Injection?

javascript - 找到被点击的li号

javascript - react 相当于 document.createElement()

javascript - 向下滚动到带有 Protractor 的元素

javascript - Jasmine jQuery 循环单元测试

node.js - 发布找不到gulp