2017-02-21 7 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

次の2つの別々の問題があります。

  1. ユニットテストのコードの繰り返しを。
  2. 単体テストでのコード可読性。

DRYは有用な原則ですが、単体テストを書くときに彼の重要性を過大評価しません。可読性とメンテナンス性は非常に重要ですが、私は可読性の目に見える改善のためにちょっとした冗長性を取り入れています。

第2のポイントは部分的に意見に基づいていますが、私は言うでしょう:約束を使用する方法を学び、学習します。 Promisesは常に安全です(ランタイムエラーをキャッチするには、thenの中にPromiseを返し、failを呼び出すことを覚えておく必要があります)が、読みやすくなります。

堅牢なPromise実装を活用するには、ES6実装またはQのようなライブラリを使用できます。

幸運。

関連する問題