Ruby on rails,单元测试中的错误

时间:2011-08-18 13:01:11

标签: ruby-on-rails unit-testing

我有一对多关系,一组有很多服务器。为了测试这种关系,我写了这个测试,但它只有在我发布行时才能工作。为什么呢?

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

1 个答案:

答案 0 :(得分:1)

因为group.servers 不是 Array。它的行为很像一个,但它实际上是ActiveRecord::Association::HasManyAssociation的一个实例。它的祖先类(ActiveRecord :: Association :: AssociationProxy)实际上甚至将class传递给了一个底层对象,因此group.servers.class确实给了Array,但它实际上不是一个。

编辑:快速说明,虽然我很确定这是你失败的原因,但它并不完全合理;在我的测试应用中,相当于group.servers.instance_of? Arraytrue,而assert_instance_of的{​​{3}}暗示应该足够好。