FactoryGirl中的存根方法

时间:2013-05-16 09:09:59

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

我有3个型号:

Article:
has_many photos

Photo:
belongs_to article
belongs_to photoType

PhotoType:
has_many articles

还有一家工厂:

FactoryGirl.define do
  factory :article do
    title 'The Batcave'
    content '5 Smith Street'
    after_build do |article|
      article.photos << FactoryGirl.build(:photo, :article => article)
      article.photos << FactoryGirl.build(:photo, :article => article)
    end
  end
end

在文章模型中,我有一个方法get_photo(type),它根据类型查询数据库,返回一个合适的照片对象。

我的问题是如何在我的工厂中存根此方法。现在get_photo总是返回nil。

stubed article.get_photo(:big)应该返回article.photos [0]

1 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案。

before(:all) do
    @articles = FactoryGirl.build_list(:article, 10)
end

在测试中我必须添加(我只需要第一篇文章来测试):

@articles[0].stub(:photo).with(:big).and_return(@articles[0].photos[1])

然而,当我把这一行放在before(:all)块之前它不起作用。 https://github.com/rspec/rspec-rails/issues/279

模拟被隐式验证并在(:each)之后被清除,因此它们将无法在之前工作(:all)。