2012-01-20 10 views
0

このHow do I test Pony emailing in a Sinatra app, using rspec?を使ってEメールを送信するRails 3.1アプリをテストしようとしました。送信はうまくいきますが、テストがうまくいくまでには苦労しています。ここで私がこれまで持っているものだ...Rails 3.1でのPonyとRSpecを使った電子メールのテスト

スペック/ 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 == "[email protected]" 
     params[:body].should include("Congratulations") 
    end 
end 

、私はこれを取得...

障害:

1)UsersController POST '作成'成功挨拶メールを送信する必要があります 失敗/エラー:Pony.should_receive(:mail)do | params |予想 (ポニー).MAIL(任意の引数) : が受け取ら1時間:それがどのように見える

'におけるブロック `./spec/controllers/users_controller_spec.rb:121:in 0回 位(4つのレベル)ポニーはメールを受け取っていないが、実際のメールが送信されていることは分かっている。

アイデア? (ない:メール)を提供する:ここでは

答えて

2

がPony.should_rececieveが必要

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

...私は最終的に、テストのためになってしまったものだ、DO /端が少し変更、およびポストはありましたセットアップ後に実行されます。

これは他の人に役立つことを願っています。

0

これは古い質問ですが、これをテストする別の方法があります。ポニーのバージョン1.10にはoverride_optionsが追加されました。ポニーはMailを使用してメールを送信します。 override_optionsを使用すると、Mailに組み込まれているTestMailer機能を使用できます。だから、このようなあなたのテストを設定することができます。

を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 '[email protected]' 
end 
関連する問題