2

我有 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。

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

4

1 回答 1

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

模拟在(:每个)之后被隐式验证和清除,因此它们在之前(:所有)中不起作用。

于 2013-05-16T18:24:41.990 回答