Тестирование электронной почты с Pony и RSpec в Rails 3.1 - PullRequest
0 голосов
/ 21 января 2012

Я пытался использовать это Как проверить электронную почту Pony в приложении Sinatra, используя rspec? , чтобы протестировать приложение Rails 3.1, отправляющее электронную почту.Отправка работает нормально, но мне сложно заставить тесты работать.Вот что у меня есть ...

spec / spec_helper.rb

config.before(:each) do
    do_not_send_email
end
.
.
.
def do_not_send_email
    Pony.stub!(:deliver) # Hijack to not send email.
end

и в моем users_controller_spec.rb

it "should send a greeting email" do
    post :create, :user => @attr
    Pony.should_receive(:mail) do |params|
        params[:to].should == "nuser@gmail.com"
        params[:body].should include("Congratulations")
    end
end

и я получаю это ...

Сбои:

1) После успешного создания POST UsersController следует отправить приветственное письмо. Ошибка / Ошибка: Pony.should_receive (: mail) do | params |(Пони) .mail (любые аргументы) ожидается: 1 раз получил: 0 раз # ./spec/controllers/users_controller_spec.rb:121:in `блок (4 уровня) в '

Похоже, пони неполучаю электронное письмо, но я знаю, что настоящее электронное письмо отправляется.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Вот что я наконец-то получил для теста ...

it "should send a greeting email" do
    Pony.should_receive(:deliver) do |mail|
        mail.to.should == [ 'nuser@gmail.com' ]
        mail.body.should =~ /congratulations/i
    end
    post :create, :user => @attr
end

Pony.should_rececieve нуждается в: доставить (не: в почту), do / end был немного изменен, и постбыло сделано после настройки.

Надеюсь, это поможет кому-то еще.

0 голосов
/ 24 мая 2016

Я знаю, что это старый вопрос, но есть другой способ проверить это. Добавлена ​​версия 1.10 Пони override_options. Пони использует Mail для отправки электронной почты. override_options позволяет использовать функциональность TestMailer, встроенную в Mail. Таким образом, вы можете настроить свой тест следующим образом:

In spec_helper

require 'pony'
Pony.override_options = { :via => :test }

В вашем тесте

before do
  Mail::TestMailer.deliveries.clear
end

it 'some test' do
  # some code that generates an email
  mail = Mail::TestMailer.deliveries.last
  expect(mail.to).to eql 'some@email.com'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...