【问题标题】:Mongoid == (equals) operator not working as expectedMongoid == (equals) 运算符未按预期工作
【发布时间】:2012-08-19 09:26:39
【问题描述】:

有时在我的测试中我会比较两个用户对象:

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>.==.

我不确定这是为什么。我假设 diff 行上显示的用户 id 意味着它是对象的不同实例,但 Mongoid 应该检查 _id 参数是否相等,对吗?我正在使用 Mongoid 2.4.12。

我认为如果对象已过期但结果相同,这可能会有所帮助:

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

我现在已经开始这样做了,但我担心可能发生了其他事情。

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

谢谢!

【问题讨论】:

    标签: rspec mongoid


    【解决方案1】:

    Mongoid 首先检查类是否相同,然后检查 id 来检查相等性。

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

    如果这失败了,我怀疑其他东西正在覆盖 Document#==,我会 grep 你的 gem 看看是否是这种情况。

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2019-06-20
      • 2021-04-13
      • 1970-01-01
      • 2020-12-29
      • 2021-04-30
      • 2019-12-10
      • 1970-01-01
      相关资源
      最近更新 更多