У меня есть сломанный тест 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. Некоторая помощь будет принята с благодарностью. Спасибо.

1
Dan Rubio 30 Янв 2015 в 20:08

2 ответа

.to должен предоставить вам массив адресов электронной почты, поэтому проверьте, включено ли электронное письмо в массив с помощью must_include:

email.last.to.must_include user.email
1
infused 30 Янв 2015 в 21:50
Эй наполнил. Спасибо за ответ, тест, который сломался для меня, был email.last.to и т. д., а не email.first.to. Я попробовал ваше предложение с помощью email.first.to.must_include post_object.topic.account.email, но это совершенно другое электронное письмо. Все еще сбит с толку ...... все еще работаю над этим.
 – 
Dan Rubio
30 Янв 2015 в 22:07
Я имел в виду, что проблемной областью была электронная почта.first.last, а не электронная почта.last.to. Смотрю на это целую вечность.
 – 
Dan Rubio
30 Янв 2015 в 22:14

Ответом на эту проблему было то, что мои фабрики были выключены. Связи между моими фабричными данными динамически генерировались на лету для разных данных. Переопределение заводских данных решило эту проблему.

0
Dan Rubio 3 Фев 2015 в 17:07