【问题标题】:Code coverage for mocha with generators带有生成器的 mocha 代码覆盖率
【发布时间】:2015-03-22 06:10:30
【问题描述】:

自从我们切换到生成器后,我一直无法找到支持此功能的覆盖工具。

我们在代码和 mocha 测试本身中都使用生成器。

我们使用 co-mocha 在 mocha 测试中启用了生成器。

我想到的唯一选择是转译测试,而不是在和谐模式下运行它们。

【问题讨论】:

  • 这个问题不再相关,因为节点现在支持默认版本的生成器。您现在可以使用 istanbul 或您通常使用的任何其他代码覆盖工具。

标签: node.js automated-tests generator code-coverage mocha.js


【解决方案1】:

Unit-coverage 有基本的和声支持。 详情here.

但是,我不能正确使用这个工具:我有错误,当使用class

【讨论】:

    【解决方案2】:

    不久前 co-mocha 对我很有效。后来在一个新的代码库中它没有。经过一番挖掘,我发现 mocha 根本无法正确处理承诺,它可能与节点 5 相关;我已经登录了ticket

    在 Promise 处理正常工作的情况下,理论上您不需要修补 mocha 即可使用生成器。像这样简单地使用co.wrap() 应该可以工作:

    it('should yield in the generator', co.wrap(function*() {
       yield aPromiseReturningFunction();
       yield aGeneratorFunction();    
    }));
    

    与此同时,我编写了一个 lil 实用函数,它使用 co.wrap() 包装了一个生成器,并将 done 作为 thencatch 处理程序传递给它返回的承诺:

    function done(gen) {
      const wrapper = co.wrap(gen); 
      return function(done) {
        return wrapper.call(this, done).then(done).catch(done);
      };
    }
    

    然后我这样做:

    it('should yield in the generator', done(function*() {
       yield aPromiseReturningFunction();
       yield aGeneratorFunction();    
    }));
    

    【讨论】:

    • 问题不在于将 mocha 与生成器一起使用。那部分很好,使用 co-mocha 或 co wrap 应该可以正常工作。问题是关于在将 mocha 与生成器一起使用时获取测试覆盖率报告。回到你必须使用 --harmony 标志和 mocha 来启用生成器的时候。代码覆盖工具没有正确传输这个。这不再是一个问题,因为生成器是标准节点功能的一部分。
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2018-05-21
    • 2019-01-29
    • 2012-11-01
    • 2018-01-11
    相关资源
    最近更新 更多