2017-02-21 313 views
0

采用摩卡我经常需要做这样的事情在我的验收测试如下:DRY摩卡异步测试

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

    done(); 
    }); 
}); 

这将是很好把它擦干了一下摆脱的八方通repeading错误处理。我想到的一个想法是:

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(); 
})); 

但是这也不是真的可读。如果你能为我的重构提供一些提示,这将是很好的。

回答

0

你有两个不同的问题:在单元测试中

  1. 代码重复。
  2. 单元测试中的代码可读性。

关于第一点,DRY是一个有用的原则,但在编写单元测试时不要高估他的重要性。可读性和可维护性至关重要,海事组织和我仅仅为了可读性的切实改进而交易一点冗余。

第二点是部分基于观点,但我会说:学习和学习如何使用承诺。这并不是说Promise总是安全的(你必须记得总是在then内部返回一个Promise,并且请拨打fail来捕捉运行时错误),但它们更容易阅读。

您可以使用ES6实现或像Q这样的库来利用强大的Promise实现。

祝你好运。