2017-10-12 15 views
0

比方说,我有两个型号,其中一个需要其他的存在来验证:Rails进行测试的最佳实践,当一个ActiveRecord的模型需要另一

class Mother < ActiveRecord::Base 
    has_many :kids 
end 

class Kid < ActiveRecord::Base 
    belongs_to :mother 
    validates_presence_of :mother 
end 

当我写模型小子试验,我想要测试的第一件事是,如果没有一个存在的母亲(即,存在于数据库中),则不能保存孩子。然而,要做到这一点,我需要先让我的测试创建一个母亲。

处理这种情况的最佳方法是什么?我应该:

  • 在我测试之前将测试数据库与母体的实例结合起来?
  • 在Kid进行测试之前,依靠母亲创建母亲实例的单元测试?在这种情况下,我必须指定不推荐的测试顺序,是否正确?
  • 其他一些选项?
+0

既不,您应该做任何您的测试框架提供。固定装置或工厂。你应该不**编写依赖于其他测试的测试,实际上这不应该发生,因为你的数据库应该在测试之间清空。 – meagar

+0

@meagar我认为这应该是公认的答案 - 无论是固定装置还是工厂。你能否再次回复作为答案,以便我可以接受它? –

回答

0

初始化一个母亲和一个孩子没有母亲: mother = Mother.new PUIS kid = Kid.new

当您尝试坚持一个孩子一样,所以你可以先写会引发错误规格: expect { kid.save! }.to raise_error

然后,设置母亲kid.mother = mothe。 并期望这次坚持孩子没有错误。

相关问题