Chai の「assert」、「expect」、「should」の違いは何ですか? 質問する

Chai の「assert」、「expect」、「should」の違いは何ですか? 質問する

assert、、expectおよびの違いは何ですかshould? 何をいつ使用すればよいですか?

assert.equal(3, '3', '== coerces values to strings');
    
var foo = 'bar';
    
expect(foo).to.equal('bar');
    
foo.should.equal('bar');

ベストアンサー1

違いはそこに記録されている

3 つのインターフェースは、アサーションを実行するための異なるスタイルを提供します。 最終的には、同じタスクを実行します。 ユーザーによっては、一方のスタイルを他方のスタイルよりも好む場合があります。 そうは言っても、強調する価値のある技術的な考慮事項がいくつかあります。

  1. およびインターフェースは を変更しませんが、は を変更します。したがって、 を変更できない、または変更したくない環境では、これらの方が適切な選択となりassertます。expectObject.prototypeshouldObject.prototype

  2. およびインターフェースはassertexpectほぼすべての場所でカスタム メッセージをサポートします。たとえば、次のようになります。

     assert.isTrue(foo, "foo should be true");
     expect(foo, "foo should be true").to.be.true;
    

アサーションが失敗した場合、失敗したアサーションとともに「foo は true である必要があります」というメッセージが出力されます。インターフェイスでカスタム メッセージを設定する機会はありませんshould

(歴史的注記: この回答では長い間、 でカスタム メッセージを取得するにはexpect回避策を使用する必要があると述べられていました。オーレリアン・リボンメッセージをexpect2 番目のパラメータとして渡すと機能すると通知されました。したがって、回避策は必要ありません。どのバージョンの Mocha からこのメッセージのサポートが開始されたのか、またどのバージョンのドキュメントで初めてこのメッセージが文書化されたのかはわかりません。

カスタム メッセージと を使用しない場合、 、および はすべて次のように出力するassert.isTrue(foo)ことexpect(foo).to.be.trueに注意してください。foo.should.be.truefoo === 1

    AssertionError: expected 1 to be true

expectとインターフェースはshould使いやすいですが、読むアサーションが失敗したときに、あるインターフェースが他のインターフェースよりも自然に情報を提供するというわけではありません。このメッセージは3つのインターフェースすべてで同じですが、まさにテストしていたのですが、取得した値は でしたが1、求めていたのは でしたtrue。何をテストしていたのかを知りたい場合は、メッセージを追加する必要があります。

おすすめ記事