我想比较身份上的数据。我知道它们是一样的。下面的测试证实了这一点:
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])