Следующая спецификация работает, но я знаю, что так не должно быть. Мне трудно разобраться в rspec, в частности, издеваться и заглушки.
Это код модели
class RecipeFermentable < ActiveRecord::Base
belongs_to :recipe
belongs_to :product
def set_attributes()
attrs = product.product_attributes
self.ppg = attrs.find_by_name(:ppg.to_s).value
self.ecb = attrs.find_by_name(:ecb.to_s).value
end
end
И это спецификация, которую я написал
it "should set the attributes from the product" do
@product_attribute1 = mock_model(ProductAttribute, :name => :ppg, :value => 40)
@product_attribute2 = mock_model(ProductAttribute, :name => :ecb, :value => 1)
@product = Product.new
@product.product_attributes << @product_attribute1
@product.product_attributes << @product_attribute2
@recipe_fermentable = RecipeFermentable.new
@recipe_fermentable.product.should_receive(:product_attributes).and_return(@product_attributes)
@product_attributes.stub(:find_by_name).with(:ppg.to_s).and_return(@product_attribute1)
@product_attributes.stub(:find_by_name).with(:ecb.to_s).and_return(@product_attribute2)
@recipe_fermentable.set_attributes
@recipe_fermentable.ppg.should eql(40)
@recipe_fermentable.ecb.should eql(1)
end
Для начала, моя спецификация намного больше, чем мой метод, и я использую настоящий Продукт. Некоторые советы по написанию хорошей спецификации для этого были бы очень полезны. Также, если кто-нибудь знает хороший ресурс для изучения rspec с использованием макетов и заглушек, пожалуйста, не могли бы вы добавить несколько ссылок.
Спасибо