2011-08-18 111 views
1

我有一對多的關係,一個組有很多服務器。爲了測試這種關係,我編寫了這個測試,但是它只在我沒有聯繫線時才起作用。爲什麼?Ruby on rails,單元測試錯誤

test 'Group can include server' do 
    group = groups(:default) 
    group.servers << servers(:default) 
    # Test work, when I uncomment this line: 
    # assert_instance_of Array, group.servers 
    group.save 
    assert_instance_of Server, group.servers.first 
end 
+0

當*註釋*或*取消註釋*該行時,它是否工作? *這個*代碼是否工作? – Mischa

+0

取消註釋時。 –

回答

1

因爲group.servers不是Array。它的行爲很像一個,但它實際上是一個ActiveRecord::Association::HasManyAssociation的實例。它的祖先類(ActiveRecord :: Association :: AssociationProxy)實際上甚至將class傳遞給一個底層對象,因此group.servers.class確實給出了Array,但它並不是真正的一個。

編輯:快速說明,雖然我很確定這是你失敗的原因,但它並不完全合理;在我的測試應用程序中,相當於group.servers.instance_of? Array的是true,而sourceassert_instance_of意味着應該足夠好。