0

刚从 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在这种情况下我必须创建固定装置吗?还是只是嘲笑它?

4

1 回答 1

1

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

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

模拟的优点是它不会接触数据库,但它可能更脆弱。

于 2012-06-23T05:02:56.457 回答