2017-10-16 2 views
1

私はChaiとPactでテストしているコードスニペットを持っています。私はチャイの期待を同期させることはできませんか?

 var myVerify =() => { 
     provider.verify().then(() => { 
      console.log('B verified') 
      done() 
     }) 
     } 
     expect(myVerify).to.not.throw() 

これは動作しますが、それは私がテストに進む前に、完全なのを確認する協定のを待つことを確認するために、ラッパー関数を作るために通過するために余計な作業がたくさんあります:それは次のようになります。パクトには内部状態があり、完了するとクリアされます。 。私はちょうどこの呼び出す場合:

は(provider.verify())to.not.throw()

を期待し、それは他のテストと競合します。

このコードは問題なく動作するようですが、非常に面倒です。これを実現する簡単な方法がありますか?

答えて

1

実際にエラーが発生した場合は、約束が「エラーを投げない」ため、おそらく約束を拒否しているため、決して捕まえられないからです。.catch.thenの2番目のパラメータです。

あなたが欲しいものをやっての2通りの方法があります。

1)だけモカと:あなたはないですので、この単純な例では

return provider.verify().then(() => { 
     console.log('B verified'); 
     done(); 
},() => throw new Error("B verification failed")); 

が、私たちは何かを確認するためにチャイを使用していません実際にベリファイのデータ出力を確認すると、約束が成功したかどうかを確認するだけで、失敗した場合はテストに失敗します。モカは、デフォルトで、テストの一環として返される限り、約束を理解します。

しかし、この方法は、it関数をラップするには、doneパラメータを注入する必要があることを意味します。私が使用しているのファンです:Chai as Promised

2)チャイ:あなたのテストで、その後

chai.use(require("chai-as-promised)) 

を使用して約束通り

あなたはセットアップチャイに必要な、単純に実行します。

return expect(provider.verify()).to.eventually.be.fulfilled; 

このテストは約束を返すのを待っており、チャイはそれが実際に実行され、拒否されていないことを確認します。私はこの構文がはるかに簡単に使用できるようになり、テストをより簡単に書くことができます。あなたもPromises.all使用して、同じ約束で複数のを期待を持つことができます。

var verify = provider.verify(); 
return Promises.all(
    expect(verify).to.eventually.be.fulfilled, 
    expect(verify).to.eventually.be.true, 
); 
+0

またはそれ以上簡潔: '当時)(provider.verifyを返す(行われ、()=>新しいエラーを投げる(「Bの検証に失敗しました」 )); ' しかし、「チャイ・ア・ウィッツ・アズ・ウィズ・ザ・ウィズ・ザ・ウィズ・ザ・ベスト・オブ・ザ・ベスト –

+0

@MatthewFellows私はあなたのメソッドをお勧めできません。なぜなら、verify関数が何かを返すならば、それはmochaがエラーメッセージとして解釈してテストに失敗する 'done'を呼び出します。 –

+0

空の成功した約束を除いて何も返さないでください。 –

関連する問題