У меня есть сломанный тест ActionMailer::Base, который на данный момент меня смущает. Возможно, я не вижу, в чем ошибка, но когда я дохожу до своего утверждения, которое проверяет правильность отображения поля электронной почты to:, я получаю рассматриваемую ошибку. Ниже приведен фрагмент моего кода. Я отключаю MiniTest::Spec::Test с Factory Girl. Ниже приведен мой код Factory Girl и условия тестирования. Я обрисовал проблемные области и проиллюстрировал, какие условия будут выводиться на консоль.
describe PostsController do
let(:forum) { create(:forum) }
let(:user) { create(:account) }
let(:admin) { create(:admin) }
let(:topic) { create(:topic) }
let(:post_object) { create(:post) }
before { ActionMailer::Base.deliveries.clear }
#code ------------
it 'create action: user2 replying to user1 receives
a creation email while user1 receives a reply email' do
login_as user
assert_difference('ActionMailer::Base.deliveries.size', 2) do
post :create, topic_id: post_object.topic.id, post: { body:
'Post reply gets sent to User 1. Post creation gets sent to User 2' }
end
email = ActionMailer::Base.deliveries
# -----debugging area ----------
puts email.first.to 'user1@gmail.com'
puts email.last.to 'user2@gmail.com'
puts email.map(&:to) 'user1@gmail.com, user2@gmail.com'
# ------debugging area --------
#-------failing test ----------
email.first.to.must_equal post_object.topic.account.email
Expected 'comesoutofnowhereuser@gmail.com, Actual: user1@gmail.com'
#------failing test -----------
email.first.subject.must_equal 'Someone has responded to your post'
email.last.to.must_equal user.email
email.last.subject.must_equal 'Post successfully created'
must_redirect_to topic_path(post_object.topic.id)
end
Я не знаю, почему следует ожидать crazyuser@gmail.com. Мне интересно, есть ли какие-либо изменения после блока assert_difference, но я также пробовал запускать инструкции puts и отладчика в блоке и получаю те же результаты. Ничего не меняется из assert_difference. Некоторая помощь будет принята с благодарностью. Спасибо.
2 ответа
.to
должен предоставить вам массив адресов электронной почты, поэтому проверьте, включено ли электронное письмо в массив с помощью must_include
:
email.last.to.must_include user.email
Ответом на эту проблему было то, что мои фабрики были выключены. Связи между моими фабричными данными динамически генерировались на лету для разных данных. Переопределение заводских данных решило эту проблему.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.