我有以下Rspec测试:
it 'creates an initial version with all the versionable attributes' do
resource = create(:versionable_resource)
version_attributes = resource.initial_version.new_attributes.sort
expect(version_attributes).to eq(resource.versionable_attributes.sort)
end
version_attributes
和resource.versionable_attributes
都是哈希值。它们具有完全相同的内容。但是,eq
语句失败了:
expected: [["r_boolean", true], ["r_date", Sun, 26 Jan 2014], ["r_datetime", Sun, 26 Jan 2014 23:00:56 UTC +00:00], ["r_float", 3.14], ["r_integer", 3], ["r_string", "my string"], ["r_text", "my text"], ["r_time", 2014-01-26 17:00:56 -0600]]
got: [["r_boolean", true], ["r_date", Sun, 26 Jan 2014], ["r_datetime", Sun, 26 Jan 2014 23:00:56 UTC +00:00], ["r_float", 3.14], ["r_integer", 3], ["r_string", "my string"], ["r_text", "my text"], ["r_time", 2014-01-26 17:00:56 -0600]]
(compared using ==)
如您所见,内容完全相同。为什么这会失败?我应该使用与eq
不同的匹配器吗?我也尝试了eql
和equal
,但都失败了。
答案 0 :(得分:2)
您没有说出各种方法的作用(例如initial_version
,versionable_attributes
等),但是如果您的比较的预期值或实际值来自您的数据库而另一个不是,差异可能是由于数据库维护精度低于Ruby本身,如Trouble comparing time with RSpec