我有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]
答案 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)。