2011-08-18 112 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意味着应该足够好。