2016-05-13 4 views
0

Недавно я переключил приложение rails для отправки почты через amazon ses. Отправка почты работает отлично, однако испытания терпят неудачу вокруг почтовых отправлений со следующей ошибкой:Rspec тесты не работают при использовании amazon ses отправка почты

TypeError: can't convert Fixnum into String # (eval):3:in 'send_raw_email'

У меня есть настройки почты тестовой среды набор правильно: тест

config.action_mailer.delivery_method = :test 

Я могу предотвратить ошибки, не отправляя электронные письма, но затем я получаю ошибки о том, что почта не доставляется.

config.action_mailer.perform_deliveries = false 
should_change -> { ActionMailer::Base.deliveries.size } do 
    result should have changed, but is still 0 

версии Gem ниже:

rails (3.2.12) 
rspec (2.8.0) 
cucumber (2.3.3) 
aws-sdk (1.33.0) 

Любые предложения о том, что происходит, или как работать вокруг этого. Если какая-либо другая информация необходима, дайте мне знать. Это отлично работало, прежде чем я переключил отправку почты на использование amazon ses.

EDIT:

Тесты, которые терпят неудачу, все, что связаны по электронной почте отправляется с использованием Поставлять

BlahMailer.send_invite(team).deliver 

Это внутри модели и контроллер, тесты просто вызвать соответствующий маршрут контроллер или вызвать связанную функцию в модели. Не уверен, что еще показывать, так как ошибка показывает, что это происходит от send_raw_email, которая является функцией ses, а не кода из приложения.

EDIT 2: Больше кода

Вот один из тестов, в этом примере он устанавливает завод по модели и каждый тест.

before :each do 
    subject = Factory(:ticket, action_type: 'name_change', team_name: 'test123') 
end 

Вот завод в RSpec

Factory.define :ticket do |ticket| 
    team = nil 
    ticket.team { team = Factory(:team) } 
    ticket.creator { team.captain } 
    ticket.subject { Factory(:team_assignment, team: team, user: Factory(:active_user)).user } 
end 

А потом вот код в модели вокруг, где электронная почта отправляется

%w(requested approved cancelled accepted).each do |state| 
    define_method "notify_#{state}" do 
    TicketMailer.send("#{action_type}_#{state}", self).deliver 
    end 
end 

Я попытался положить в прямой текст для в основном все, что связано с почтовой программой, просто чтобы убедиться, что с этим нет никаких проблем. Если вам больше нужна модель или фактическая почтовая программа, дайте мне знать. Я просто не могу понять, где это умирает. Мой единственный вывод - это просто ошибка со старыми версиями aws sdk и rspec gems. Я даже попытался заменить aws-sdk более новыми версиями, но все еще не удалось заставить что-нибудь еще работать.

+1

Вам нужно будет показать больше кода для тех, кто поможет. [Изменить] (http://stackoverflow.com/posts/37216571/edit) ваш вопрос, чтобы включить как тестируемый метод, так и тест или тесты, которые не работают. –

+0

Добавил больше, не знаю, что еще я могу вам показать, поскольку все, что делает звонок, это делать .deliver и работал до того, как я изменил метод доставки: amazon_ses. Может ли это быть проблемой с драгоценным камнем aws-sdk? – Mentch

+0

Что такое 'команда' в этом случае? Включение большего контекста кода было бы полезно. –

ответ

0

Проблема в том, что вы устанавливаете config.action_mailer.perform_deliveries = false, поэтому поставки не производятся, и поэтому ActionMailer::Base.deliveries всегда будет пустой коллекцией.

Если вы хотите проверить доставку по электронной почте, установите config.action_mailer.perform_deliveries = true и используйте перехватчик, чтобы гарантировать, что вы не отправляете электронные письма пользователям.

lass SandboxEmailInterceptor 
    def self.delivering_email(message) 
    recipients = 
     if Rails.env.test? 
     [ 
      "[email protected]" 
     ] 
     end 

    message.to = recipients 
    message.cc = [] 
    end 
end 

unless Rails.env.production? || Rails.env.test? 
    ActionMailer::Base.register_interceptor(SandboxEmailInterceptor) 
end 
+0

Пожалуйста, перечитайте мой вопрос, я только установил их в false, чтобы проверить что-то, и он исправил ошибки, отличные от новых, возникающих в связи с отсутствием отправки сообщений электронной почты. – Mentch

Смежные вопросы