2017-02-21 226 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實現。

祝你好運。