4

私はMochaでExpressNodeアプリをテストしています。次のテストを行いたい(2つの空のアレイを比較):

assert.equal [], []

合格する。ただし、モカは私に次のエラーを出します。 AssertionError: [] == []

2つの空の配列を比較して渡すには、どちらの方法を使用する必要がありますか?

4

2 に答える 2

20

オブジェクト({}または[])を比較する場合は、参照を比較するだけassert.deepEqual()なので、使用する必要があります:(または)は常にfalseになります。assert.equal([], []){} === {}[] === []

http://nodejs.org/api/assert.html#assert_assert_deepequal_actual_expected_message

于 2013-01-27T09:12:38.737 に答える
3

問題は、配列が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で自己宣伝が望まれないことは知っていますが、この場合、私が自分で作成したツールは、元の投稿者の質問を解決するだけです。したがって、この回答をスパムとしてマークしないでください。

于 2013-01-27T09:47:00.370 に答える