【问题标题】:Querying another model from inside a model created by FactoryGirl从 FactoryGirl 创建的模型中查询另一个模型
【发布时间】:2012-06-22 10:28:27
【问题描述】:

刚从 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 固定装置吗?还是只是嘲笑它?

【问题讨论】:

  • 这两个模型之间是否存在:has_many, :through 关系?
  • @SteveRowley 不。它们根本不相关——除了这个特定的方法。
  • 好的 - 如果它们是相关的,我会说你可以在没有嘲笑的情况下做到这一点,但如果不是,我同意接受的答案。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多