0

私のテストでは、2つのユーザーオブジェクトを比較することがあります。

transaction.sender.should == user1

そして、Rspecは、オブジェクトが同じID(および他のパラメーター)を持っているが、異なるオブジェクトIDを持っていることを示すいくつかの出力を私に与えます:

 Failure/Error: tx.sender.reload.should == @u1.reload
   expected: #<User _id: 5030afb4f8182bb3a9000005, ...>
        got: #<User _id: 5030afb4f8182bb3a9000005, ...> (using ==)
   Diff:#<User:0x007fc0c7e56cf0>.==(#<User:0x007fc0c7ec53f8>) returned false even though the diff between #<User:0x007fc0c7e56cf0> and #<User:0x007fc0c7ec53f8> is empty. Check the implementation of #<User:0x007fc0c7e56cf0>.==.

なぜなのかわかりません。差分行に表示されているユーザーIDは、オブジェクトの別のインスタンスであることを意味していると思いますが、Mongoidは_idパラメーターが等しいかどうかを確認する必要がありますか?Mongoid2.4.12を使用しています。

オブジェクトが古くなっていても同じ結果が得られる場合は、これが役立つと思いました。

transaction.sender.reload.should == user1.reload

私は今のところこれを行うことにしましたが、何か他のことが起こっているのではないかと心配しています。

transaction.sender.id.should == user1.id

ありがとう!

4

1 に答える 1

3

Mongoidは、最初にクラスが同じであることを確認し、次にIDを確認することで同等性を確認します。

https://github.com/mongoid/mongoid/blob/master/lib/mongoid/document.rb#L37

これが失敗している場合は、他の何かがDocument#==をオーバーライドしていると思われます。それが当てはまるかどうかを確認するために、gemをgrepします。

于 2012-08-19T11:34:45.517 に答える