从FactoryGirl创建的模型中查询另一个模型

时间:2012-06-22 10:28:27

标签: ruby-on-rails-3 rspec bdd factory-bot

刚开始使用FactoryGirl。我有一个名为Subscription的模型。它有一个方法'set_price`,它显然做了一些计算。为此,它必须向另一个模型询问某些值:

def set_price
  base_price = Option.find_by_key(:base_price).value.to_f
  # […] some calculations
end

运行我的规格时,我得到:

   NoMethodError:
            undefined method `value' for nil:NilClass

这是合乎逻辑的,因为我没有(但是?)创建任何Options

FactoryGirl适合这个吗?在这种情况下,我是否必须创建Option灯具?或者只是嘲笑它?

1 个答案:

答案 0 :(得分:1)

这将失败,因为数据库中没有选项。您可以在测试中调用set_price之前创建选项工厂(在这种情况下,您需要确保find_by_key(:base_price)将返回工厂创建的选项),或者您可以如您所说使用模拟:

option = mock_model('Option', :value => 1)
Option.stub(:find_by_key).and_return(option)

模拟的优势在于它不会触及数据库,但它可能更脆弱。