Я все еще работаю над изучением RSpec, так что извините, если что-то упустил из виду ...
Я пишу тест для рецепта, в котором много ингредиентов. Ингредиенты фактически добавляются в процентах (с учетом общего столбца% в составе), поэтому я хочу убедиться, что общий столбец обновляется после каждого сохранения.
Итак, сейчас мой тест RSpec для модели recipe_ingredient выглядит примерно так:
it "should update recipe total percent" do
@recipe = Factory.create(:basic_recipe)
@ingredient.attributes = @valid_attributes.except(:recipe_id)
@ingredient.recipe_id = @recipe.id
@ingredient.percentage = 20
@ingredient.save!
@recipe.total_percentage.should == 20
end
У меня есть метод after_save, который просто вызывает быстрое обновление только что сохраненного ингредиента чека. Это очень просто:
РЕДАКТИРОВАТЬ: Это действие update_percentage в модели рецепта. Метод, который я вызываю после сохранения ингредиента, просто просматривает его рецепт и затем вызывает этот метод для него.
def update_percentage
self.update_attribute(:recipe.total_percentage, self.ingredients.calculate(:sum, :percentage))
end
Я что-то напутал? У меня нет доступа к родительскому объекту при выполнении тестов? Я попытался запустить базовый метод, чтобы просто изменить имя родительского рецепта после сохранения, но это не сработало. Я уверен, что это что-то в отношениях, которые я пропустил, но все отношения настроены правильно.
Спасибо за любую помощь / совет!