当一个ActiveRecord模型需要另一个时,Rails测试最佳实践

时间:2017-10-12 19:35:24

标签: unit-testing ruby-on-rails-4

我们说我有两个模型,其中一个需要另一个模型的存在才能验证:

class Mother < ActiveRecord::Base
  has_many :kids
end

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

当我为模特儿童编写测试时,我要测试的第一件事是,如果没有母亲存在(即保留在数据库中),就无法保存儿童。但是,要做到这一点,我需要先让我的测试创建一个母亲。

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

  • 在测试之前,用母亲的实例为测试数据库播种?
  • 在Kid接受测试之前,依靠母亲的单元测试来创建母亲的实例?在这种情况下,我必须指定测试的顺序,这是不推荐的,对吗?
  • 其他一些选择?

1 个答案:

答案 0 :(得分:0)

在没有母亲的情况下初始化母亲和孩子: mother = Mother.new PUIS kid = Kid.new

当你尝试像这样坚持一个孩子时,你可以先编写一个引发错误的规范: expect { kid.save! }.to raise_error

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