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 つのインターフェースは、アサーションを実行するための異なるスタイルを提供します。 最終的には、同じタスクを実行します。 ユーザーによっては、一方のスタイルを他方のスタイルよりも好む場合があります。 そうは言っても、強調する価値のある技術的な考慮事項がいくつかあります。
およびインターフェースは を変更しませんが、は を変更します。したがって、 を変更できない、または変更したくない環境では、これらの方が適切な選択となり
assert
ます。expect
Object.prototype
should
Object.prototype
およびインターフェースは
assert
、expect
ほぼすべての場所でカスタム メッセージをサポートします。たとえば、次のようになります。assert.isTrue(foo, "foo should be true"); expect(foo, "foo should be true").to.be.true;
アサーションが失敗した場合、失敗したアサーションとともに「foo は true である必要があります」というメッセージが出力されます。インターフェイスでカスタム メッセージを設定する機会はありませんshould
。
(歴史的注記: この回答では長い間、 でカスタム メッセージを取得するにはexpect
回避策を使用する必要があると述べられていました。オーレリアン・リボンメッセージをexpect
2 番目のパラメータとして渡すと機能すると通知されました。したがって、回避策は必要ありません。どのバージョンの Mocha からこのメッセージのサポートが開始されたのか、またどのバージョンのドキュメントで初めてこのメッセージが文書化されたのかはわかりません。
カスタム メッセージと を使用しない場合、 、および はすべて次のように出力するassert.isTrue(foo)
ことexpect(foo).to.be.true
に注意してください。foo.should.be.true
foo === 1
AssertionError: expected 1 to be true
expect
とインターフェースはshould
使いやすいですが、読むアサーションが失敗したときに、あるインターフェースが他のインターフェースよりも自然に情報を提供するというわけではありません。このメッセージは3つのインターフェースすべてで同じですが、何まさにテストしていたのですが、取得した値は でしたが1
、求めていたのは でしたtrue
。何をテストしていたのかを知りたい場合は、メッセージを追加する必要があります。