私はMochaでExpressNodeアプリをテストしています。次のテストを行いたい(2つの空のアレイを比較):
assert.equal [], []
合格する。ただし、モカは私に次のエラーを出します。
AssertionError: [] == []
2つの空の配列を比較して渡すには、どちらの方法を使用する必要がありますか?
オブジェクト({}または[])を比較する場合は、参照を比較するだけassert.deepEqual()
なので、使用する必要があります:(または)は常にfalseになります。assert.equal([], [])
{} === {}
[] === []
http://nodejs.org/api/assert.html#assert_assert_deepequal_actual_expected_message
問題は、配列がJavaScriptの参照型であるため、参照のみが比較されることです。そしてもちろん、互いに独立した2つの異なる空の配列を作成する場合、それらは2つの異なるオブジェクトであり、2つの異なる参照を持ちます。
そのため、テストは失敗します。
2つのオブジェクトが同一であるかどうかではなく、内容が同じであるかどうかには関心がないことがよくありますが、基本的にオブジェクトに関して同じ問題が発生します(ディープイコールは実行されません)。
これを処理するモジュールを作成したのはそのためです:comparejs。このモジュールは、他のいくつかの優れた機能に加えて、すべての(!)タイプについて、値による比較とIDによる比較を提供することでこの問題を解決します。それがあなたがここで必要としているものだと思います。
特にmochaのコンテキストを求めているので、私はnode-assertthatと呼ばれる独自のassert-moduleも作成しました。これは、内部でcomparejsを利用します。副作用として、より読みやすい(より流暢な)構文が得られます。それ以外の
assert.equal(foo, bar);
あなたは書ける
assert.that(foo, is.equalTo(bar));
おそらくこれはあなたが行く方法かもしれません。
PS:Stackoverflowで自己宣伝が望まれないことは知っていますが、この場合、私が自分で作成したツールは、元の投稿者の質問を解決するだけです。したがって、この回答をスパムとしてマークしないでください。