2014-01-26 108 views
0

我有以下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的哈希值。他們有完全相同的內容。

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語句與失敗。爲什麼這是失敗的?我應該使用與eq不同的匹配嗎?我也嘗試過eqlequal,並且都以同樣的方式失敗。

回答

2

你不會說什麼各種方法(例如initial_version,versionable_attributes等),但如果您的比較的預期值或實際值來自您的數據庫,而另一個不是,那麼差異是可能是由於數據庫維護的精確度低於Ruby本身,如Trouble comparing time with RSpec

+0

解釋不幸的是,它看起來像你是對的。當我從比較中刪除時間和日期時,它按預期工作。你碰巧知道你是否可以從Ruby時間對象中刪除納秒? – nullnullnull

+0

我不知道如何從Ruby時間對象中移除納秒,但您可以通過調用'change(nsec:0)'來創建一個0納秒的新對象。 –