DRY摩卡异步测试

时间:2017-02-21 07:44:15

标签: javascript node.js mocha

使用mocha我经常需要在验收测试中执行以下操作:

beforeEach(function(done) {
  Factory.createMany('artifact', 2, function(err, result) {
    if(err) {
      return done(err);
    }
    expected = result;

    done();
  });
});

将它干掉一点以消除彻底的重复错误处理会很好。我想出的一个想法是:

function failOrRun(done, fn) {
  return function(err, result) {
    if (err) {
      return done(err);
    }

    return fn(result);
  };
}

Factory.createMany('artifact', 2, failOrRun(done, function(result) {
  expected = result;
  done();
}));

但这也不是真的可读。如果你能给我一些关于重构的提示,那就太好了。

1 个答案:

答案 0 :(得分:0)

您有两个不同的问题:

  1. 单元测试中的代码重复。
  2. 单元测试中的代码可读性。
  3. 关于第一点,DRY是一个有用的原则,但在编写单元测试时不要过高估计它的重要性。可读性和可维护性至关重要,IMO,我只需稍微冗余就可以提高可读性。

    第二点是基于意见的,但我会说:学习和学习如何使用Promises。并不是Promise总是安全的(你必须记住总是在then内返回一个Promise并调用fail以捕获运行时错误),但它们更容易阅读。< / p>

    您可以使用ES6实现或类似Q的库来利用强大的Promise实现。

    祝你好运。