assert
、expect
、 とはどう違いshould
ますか? いつ何を使う?
assert.equal(3, '3', '== coerces values to strings');
var foo = 'bar';
expect(foo).to.equal('bar');
foo.should.equal('bar');
assert
、expect
、 とはどう違いshould
ますか? いつ何を使う?
assert.equal(3, '3', '== coerces values to strings');
var foo = 'bar';
expect(foo).to.equal('bar');
foo.should.equal('bar');
違いはそこに文書化されています。
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 should be true」というメッセージが出力されます。インターフェイスでカスタム メッセージを設定する機会はありませんshould
。
(歴史的なメモ: 長い間、この回答では、でカスタム メッセージを取得するexpect
には、回避策を使用する必要があると述べられていました。Aurélien Ribonexpect
は、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
。何をテストしていたのか知りたい場合は、メッセージを追加する必要があります。