Это отличная дискуссия. Переопределение метода, как предлагает Бенор, будет прекрасно работать. Если вы думаете, что хотите захватить другие пользовательские события, то, как некоторые другие предложили в другом месте, класс Observer может быть самым чистым подходом. Это решение для Rails 3.0.x и 3.1.
Чтобы настроить наблюдателя, внесите следующие изменения в файл приложения, добавив этого наблюдателя к другим, которые у вас уже могут быть.
#config/application.rb
config.active_record.observers = :user_observer
Затем создайте новый файл в каталоге моделей:
#app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer
def after_create(user)
Notifier.user_new(user).deliver
end
end
Если у вас есть тест на огурец, который выполняет функции создания пользователя, вы можете добавить этот шаг к этой функции и создать резервную копию с рабочим шагом, чтобы проверить электронную почту в массиве тестовой почты.
#features/users/sign_up.feature for example
Scenario: User signs up with valid data
...
And I should receive an email with "[Text from your welcome message]"
#features/common_steps.rb
Then /^I should receive an email with "([^"]*)"$/ do |value|
# this will get the most recent email, so we can check the email headers and body.
ActionMailer::Base.deliveries.should_not be_empty
@email = ActionMailer::Base.deliveries.last
@email.body.should include(value)
#@email.from.should == ["no-reply@example.com"]
end
В вашей среде / test.rb должны быть установлены следующие параметры для создания почтового массива вместо отправки:
config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
Само собой разумеется, что вы можете проверить в сообщении гораздо больше (от, до и т. Д.), Но это поможет вам начать BDD, если вы так склонны.
См. Также некоторые более старые темы StackOverflow, в которых есть понимание этого вопроса: