Jasmine - 使用自定义报告程序
Jasmine - Using a Custom Reporter
我正在用 Jasmine via Gulp 测试一些 JavaScript。我想创建自己的记者。在这个时候,我的记者是最基本的。它看起来像这样:
'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');
}
};
以上代码本质上是Jasmine提供的example custom reporter。我的挑战是,我不知道如何让 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 的来源,默认报告器未公开。相关代码:
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 }))
;
});
我正在用 Jasmine via Gulp 测试一些 JavaScript。我想创建自己的记者。在这个时候,我的记者是最基本的。它看起来像这样:
'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');
}
};
以上代码本质上是Jasmine提供的example custom reporter。我的挑战是,我不知道如何让 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 的来源,默认报告器未公开。相关代码:
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 }))
;
});