相同的数据不相等

时间:2014-06-09 11:06:03

标签: ruby-on-rails rspec

我想比较身份的数据。我知道他们是一样的。该测试证实了这一点:

it "should pass" do
  a = []
  b = []
  a << backlink_1.id
  b.concat( results('fulltext_search', ["right"], 'like').map(&:id) )

  b == a
end

测试通过

Finished in 3.24 seconds
1 example, 0 failures
Done.

但如果我使用.should == 在测试中,它们会下降

it "should pass too" do
  results('fulltext_search', ["right"]).map(&:id).should == [backlink_1.id]
end

Failures:

  1) Search::Mapper::Backlinks::ToElasticsearch#build_search_object [defaults] first spec
     Failure/Error: results('fulltext_search', ["right"]).map(&:id).should == [backlink_1.id]
       expected: ["5395942e8cb323e711000002"]
            got: ["5395942e8cb323e711000002"] (using ==)
       Diff:
     # ./spec/lib/search/mapper/backlinks/to_elasticsearch_spec.rb:46:in `block (4 levels) in <top (required)>'

Finished in 3.2 seconds
1 example, 1 failure

日志显示数据相同。 为什么,然后提出错误?

2 个答案:

答案 0 :(得分:2)

首先,关闭,你的第一个规范确认没有:它正在进行比较,但后来却没有做任何结果。

您的第二个规范确实显示inspect的输出在两种情况下都相同。下一步是更详细地查看实际的对象实例,以检查它们实际上是否相同。例如,它们可能是不同类的实例,其中一个的==方法是检查类是否相同。

答案 1 :(得分:2)

至于数组比较,RSpec并不适用于普通==,但对于这些情况,它有一个特定的match_array,尝试类似:

results('fulltext_search', ["right"]).map(&:id).should match_array([backlink_1.id])