2016-09-06 79 views
0

这里我正在测试电子邮件确认失败。在开发模式下,一切正常。我认为我错过了一些配置。我的电子邮件确认失败的控制器规格

context 'with valid provider data' do 
    before { session["devise.provider_data"] = { provider: 'twitter', uid: '123456' } } 
    it "sends email confirmation" do 
    expect{ post :create, authorization: { email: "[email protected]" } }.to change(ActionMailer::Base.deliveries, :count).by(1) 
    end 
end 

和错误

Failure/Error: expect{ post :create, authorization: { email: "[email protected]" } }.to change(ActionMailer::Base.deliveries, :count).by(1) 
    expected #count to have changed by 1, but was changed by 0 

的Coul任何这方面的帮助?

context 'with valid provider data' do 
    before { session["devise.provider_data"] = { provider: 'twitter', uid: '123456' } } 
    before(:each) do 
    ActionMailer::Base.delivery_method = :test 
    ActionMailer::Base.perform_deliveries = true 
    ActionMailer::Base.deliveries = [] 
    end 

    after(:each) do 
    ActionMailer::Base.deliveries.clear 
    end 

    it "sends email confirmation" do 
    expect{ post :create, authorization: { email: "[email protected]" } }.to change(ActionMailer::Base.deliveries, :count).by(1) 
    end 
end 

回答

2

您缺少一些配置。我通常设置在前后回调之后测试电子邮件行为测试,如前:

before(:each) do 
    ActionMailer::Base.delivery_method = :test 
    ActionMailer::Base.perform_deliveries = true 
    ActionMailer::Base.deliveries = [] 
end 

after(:each) do 
    ActionMailer::Base.deliveries.clear 
end 

如果你想在上面的配置适用于所有测试套件,你可以将它包括你的spec/spec_helper.rb文件在配置块:

RSpec.configure do |config| 
    ....  

    config.before(:suite) do 
     ActionMailer::Base.delivery_method = :test 
     ActionMailer::Base.perform_deliveries = true 
     ActionMailer::Base.deliveries = [] 
    end 

    config.after(:suite) do 
     ActionMailer::Base.deliveries.clear 
    end 
end 
+0

为我工作!我是一个begginer,所以你介意,告诉是否有任何方法将这些东西放到配置中,因为我直接在spec中运行它(对不起,因为我的英文)我更新了问题 –

+1

更新了我的答案 – AbM