比较哈希与Rspec期望

时间:2014-01-26 23:05:22

标签: ruby-on-rails rspec

我有以下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_attributesresource.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不同的匹配器吗?我也尝试了eqlequal,但都失败了。

1 个答案:

答案 0 :(得分:2)

您没有说出各种方法的作用(例如initial_versionversionable_attributes等),但是如果您的比较的预期值或实际值来自您的数据库而另一个不是,差异可能是由于数据库维护精度低于Ruby本身,如Trouble comparing time with RSpec

中所述