相同的数据不相等



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

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

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

首先,关闭,您的第一个规范没有确认任何内容:它正在进行比较,但随后对比较结果不做任何操作。

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

对于数组比较,RSpec不太适合普通的==,但对于这些情况,它有一个特定的match_array,尝试如下:

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

最新更新