Ruby on rails 相同的数据不相等

Ruby on rails 相同的数据不相等,ruby-on-rails,rspec,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 但是如果我使用。应该= 在测试中,它们会掉落 it "should pass too" do results('ful

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

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

  b == a
end
但是如果我使用
。应该=
在测试中,它们会掉落

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
它“也应该通过”吗
结果('fulltext_search',[“right”]).map(&:id).should==[backlink_1.id]
终止
失败:
1) Search::Mapper::Backlinks::ToElasticsearch#build_Search_object[默认值]第一个规范
失败/错误:结果('fulltext_search',[“right”]).map(&:id).should==[backlink_1.id]
预期值:[“5395942e8cb323e711000002”]
获取:[“5395942e8cb323e711000002”](使用==)
差异:
#./spec/lib/search/mapper/backlinks/to_elasticsearch_spec.rb:46:in'block(4层)in'
在3.2秒内完成
1例,1例失败
日志显示数据相同。
为什么,然后引发错误?

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


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

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


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

至于数组比较,RSpec不能很好地处理普通的
=
,但它有一个特定的
匹配数组。对于这些情况,请尝试以下操作:

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

至于数组比较,RSpec不能与普通的
==
进行比较,但它有一个特定的
匹配\u数组
。对于这些情况,请尝试以下方法:

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

如果我只想比较两个数组。为什么我不能使用这个测试?这取决于数组中的对象-你需要进一步调查以确定它们不相等的原因。如果我只想比较两个数组。为什么我不能使用这个测试?这取决于数组中的对象-你需要进一步调查以确定它们不相等的原因。第一个规范没有测试任何东西。你可以添加一个
'foo'=='bar'
,而不是
a
b
,并且仍然可以通过。第一个规范不测试任何东西。您可以添加一个
'foo'=='bar'
,而不是
a
b
,并且仍然可以通过。