【问题标题】:Adding test IDs to unit tests for reporting将测试 ID 添加到单元测试以进行报告
【发布时间】:2015-11-05 19:46:17
【问题描述】:

我正在使用 mocha 并尝试构建一个单独报告测试的测试系统。目标是在项目需求和单元测试中定义的测试之间具有可追溯性。因此,例如,测试“必须能够创建新的小部件”在 id 为“43”的需求数据库中,我希望测试该标准的单元测试报告类似Test 43, Must be able to create new widgets, pass 的内容,然后更新相应的db 条目(另一个服务可能对此负责)。

这可以在 mocha 中完成吗?到目前为止,我发现的唯一一件事就是用测试 ID 替换 it() 函数中的文本,然后使用 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);
});

【问题讨论】:

    标签: javascript node.js unit-testing mocha.js


    【解决方案1】:

    这取决于您的断言库。 使用Chai,您可以选择文本字段。

    assert.should.exist(result, 'expect Result to exist (Id 43)');
    

    使用Jasmine,您可以将测试引用添加到您的it():

    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,您将无法通过测试。

    【讨论】:

    • 所以你建议走解析路线?
    【解决方案2】:

    我想要的和存在的是如此接近!我能够使用记者中测试的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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-07
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多