我有一对多关系,一组有很多服务器。为了测试这种关系,我写了这个测试,但它只有在我发布行时才能工作。为什么呢?
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 :(得分:1)
因为group.servers
不是 Array
。它的行为很像一个,但它实际上是ActiveRecord::Association::HasManyAssociation的一个实例。它的祖先类(ActiveRecord :: Association :: AssociationProxy)实际上甚至将class
传递给了一个底层对象,因此group.servers.class
确实给了Array
,但它实际上不是一个。
编辑:快速说明,虽然我很确定这是你失败的原因,但它并不完全合理;在我的测试应用中,相当于group.servers.instance_of? Array
为true
,而assert_instance_of
的{{3}}暗示应该足够好。