【问题标题】:RSpec fails when comparing empty ActiveRecord::Relation比较空 ActiveRecord::Relation 时 RSpec 失败
【发布时间】:2016-08-23 20:07:35
【问题描述】:

我正在测试我的控制器,我做了这样的事情:

bar = SuperDuper.calculate(resource)
expect(assigns(:foo)).to eq(bar)

结果我得到了这个

expected: #<ActiveRecord::Relation []>
     got: #<ActiveRecord::Relation []>

(compared using ==)

为什么 RSpec 认为这是失败的?

如您所见,我使用忽略对象身份的eq,而不是比较对象身份的equal

【问题讨论】:

  • 也许 rspec 通过链接断言对象的相等性。因此,您有 2 个相同的对象,但它们指向内存中的不同区域。考虑按值比较,而不仅仅是对象比较
  • @tmn4jq 这里我使用的是比较值的eq,而不是比较对象身份的equal
  • 使用expect(assigns(:foo).to_a).to eq(bar.to_a)expect(assigns(:foo).to_sql).to eq(bar.to_sql) 进行调试。

标签: ruby-on-rails rspec-rails


【解决方案1】:

我不确定,但你 eq 的意思是 ==。证明:https://www.relishapp.com/rspec/rspec-expectations/v/2-0/docs/matchers/equality-matchers

还要注意这一点: a.eql?(b) # object equivalence - a and b have the same value

来自这里:Rspec `eq` vs `eql` in `expect` tests

所以,我相信你应该试试eql 匹配器。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 2015-01-12
  • 2015-11-16
  • 2016-05-23
  • 1970-01-01
  • 2016-12-05
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多