Ruby on rails 3 在Rails 3.1中测试带有小马和RSpec的电子邮件
我试着用它来测试Rails 3.1发送电子邮件的应用程序。发送工作正常,但我很难让测试正常进行。这是我到目前为止所拥有的 spec/spec_helper.rbRuby on rails 3 在Rails 3.1中测试带有小马和RSpec的电子邮件,ruby-on-rails-3,rspec,pony,Ruby On Rails 3,Rspec,Pony,我试着用它来测试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 在我的用户_controller _spec.rb中 it "sh
config.before(:each) do
do_not_send_email
end
.
.
.
def do_not_send_email
Pony.stub!(:deliver) # Hijack to not send email.
end
在我的用户_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) UsersController发布“创建”成功后应发送一封问候电子邮件
失败/错误:小马。是否应该接收(:mail)do | params|
(小马)。邮件(任何参数)
预计:1次
收到:0次
#./spec/controllers/users\u controller\u spec.rb:121:in'block(4级)in'
看起来小马没有收到电子邮件,但我知道真正的电子邮件正在发送出去
有什么想法吗?这是我最后的测试结果
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_receivee需要:deliver(而不是:mail),do/end有点改变,post在设置之后完成
希望这对其他人有帮助。以下是我最后的测试结果
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_receivee需要:deliver(而不是:mail),do/end有点改变,post在设置之后完成
希望这对其他人有帮助。我知道这是一个老问题,但有另一种方法来检验这一点。版本1.10的小马增加了
覆盖选项
。小马用来发送电子邮件override_options
允许您使用内置在Mail中的TestMailer功能。因此,您可以按如下方式设置测试:
规范内辅助程序
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
我知道这是一个老问题,但有另一种方法来测试这一点。版本1.10的小马增加了
覆盖选项
。小马用来发送电子邮件override_options
允许您使用内置在Mail中的TestMailer功能。因此,您可以按如下方式设置测试:
规范内辅助程序
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