我正在使用mocha并尝试构建一个单独报告测试的测试系统。目标是在项目要求和单元测试中定义的测试之间具有可追溯性。因此,例如,测试'必须能够创建新的小部件'在ID为' 43'的需求数据库中,我希望测试该条件的单元测试报告类似Test 43, Must be able to create new widgets, pass
的内容,然后更新相应的数据库条目(另一个服务可能负责这一点)。
可以在摩卡中完成吗?到目前为止我唯一发现的是将it()
函数中的文本替换为测试ID,然后使用json报告器处理结果(但后来我没有得到文本)对于正在测试的内容,除非我将它们组合起来并进行某种解析)。注意:并非所有测试都有id。
以下是我希望
的功能示例describe("Widget" function() {
it("should allow creation of widgets", function() {
this.id = 43;
result = widget.create();
expect.result.to.exist;
});
});
然后是一个钩子,比如
afterEach(function(test) {
if (test.hasOwnProperty('id')) {
report(test.result);
}
});
或自定义记者,或某种适配器。
runner.on('test end', function(test) {
console.log(test.id); //doesn't exist, but i want it to
report(test);
});
答案 0 :(得分:0)
这取决于您的断言库。 使用Chai,您可以选择文字字段。
assert.should.exist(result, 'expect Result to exist (Id 43)');
使用Jasmine,您可以将测试引用添加到它():
describe("Widget" function() {
it("should allow creation of widgets (Id 43)", function() {
要使用Mocha custom reporters,您可以尝试在测试套件中定义一个。
module.exports = MyReporter;
function MyReporter(runner) {
var passes = 0;
var failures = 0;
runner.on('pass', function(test){
passes++;
console.log('pass: %s', test.fullTitle());
});
runner.on('fail', function(test, err){
failures++;
console.log('fail: %s -- error: %s', test.fullTitle(), err.message);
});
runner.on('end', function(){
console.log('end: %d/%d', passes, passes + failures);
process.exit(failures);
});
}
这里有2条建议。第一个是最简单的,只是简单地将你的id添加到it()的描述中,然后它将显示已经通过和失败的内容。这将是达到目标的最快捷方式。
但是,如果你想拥有更高级的方法,并且可以测试以确保设置的东西,那么你可以使用自定义报告器,如果没有设置ID,这将允许你通过测试失败。
答案 1 :(得分:0)
我想要的和存在的是如此接近!我能够使用报告中的测试的ctx
属性来解决这个问题。 test.ctx.id
test.js
describe("Widget" function() {
it("should allow creation of widgets", function() {
this.id = 43;
result = widget.create();
expect.result.to.exist;
});
});
reporter.js
runner.on('test end', function(test) {
console.log(test.ctx.id);
report(test);
});