刚开始使用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
灯具?或者只是嘲笑它?
答案 0 :(得分:1)
这将失败,因为数据库中没有选项。您可以在测试中调用set_price之前创建选项工厂(在这种情况下,您需要确保find_by_key(:base_price)将返回工厂创建的选项),或者您可以如您所说使用模拟:
option = mock_model('Option', :value => 1)
Option.stub(:find_by_key).and_return(option)
模拟的优势在于它不会触及数据库,但它可能更脆弱。