我想比较身份的数据。我知道他们是一样的。该测试证实了这一点:
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
日志显示数据相同。 为什么,然后提出错误?
答案 0 :(得分:2)
首先,关闭,你的第一个规范确认没有:它正在进行比较,但后来却没有做任何结果。
您的第二个规范确实显示inspect
的输出在两种情况下都相同。下一步是更详细地查看实际的对象实例,以检查它们实际上是否相同。例如,它们可能是不同类的实例,其中一个的==
方法是检查类是否相同。
答案 1 :(得分:2)
至于数组比较,RSpec并不适用于普通==
,但对于这些情况,它有一个特定的match_array
,尝试类似:
results('fulltext_search', ["right"]).map(&:id).should match_array([backlink_1.id])