2016-04-12 70 views
0

我正在使用Devise來管理用戶。它在開發模式下工作,但不在測試中。在開發中,調用User.invite!成功發送邀請。在測試中,它會自動失敗 - 沒有錯誤,所有與邀請相關的字段都只有一個零值,並且郵件計數不會增加。設計可邀請不會在測試環境中創建邀請

這裏是我的測試樣子(使用FactoryGirl和RSpec)

require "rails_helper" 
describe "with inviting user" do 

    let(:user) { create(:user) } 
    before(:each) do 

     Devise.mailer.deliveries = [] 

     User.invite!({email: user.email}, user) 
    end 

    after(:each) do 
     Devise.mailer.deliveries.clear 
    end 

    it 'should generate invite token' do 
     expect(user.invitation_token).to_not be_nil 
    end 

    it 'should send an email' do 

     expect(Devise.mailer.deliveries.count).to eq(1) 
    end 
end 

兩個測試失敗:

1) with inviting user should generate invite token 
    Failure/Error: expect(user.invitation_token).to_not be_nil 

     expected: not nil 
      got: nil 
    # ./spec/mailer/mailer_spec.rb:20:in `block (2 levels) in <top (required)>' 

    2) with inviting user should send an email 
    Failure/Error: expect(Devise.mailer.deliveries.count).to eq(1) 

     expected: 1 
      got: 0 

     (compared using ==) 
    # ./spec/mailer/mailer_spec.rb:28:in `block (2 levels) in <top (required)>' 

我有點爲難。有任何想法嗎?

+0

只是FYI我也在config/environments/test.rb中設置了config.action_mailer.perform_deliveries = true – nilatti

+0

我認爲你也有這個'config.action_mailer.delivery_method =:test'? –

+0

是的,這是默認設置:config.action_mailer.delivery_method =:test – nilatti

回答

0

您是否嘗試過檢查ActionMailer::Base.deliveries的交付?我敢打賭你的電子郵件在那裏。

+0

這也保持在0.我使用Devise.mailer的事情,因爲ActionMailer沒有顯示任何東西,我看到其他地方的設計跳過ActionMailer 。 – nilatti

+0

好笑。在我的測試環境中,'ActionMailer :: Base.deliveries'肯定會被我的Devise電子郵件填充....我會仔細看看我的設置。我認爲在你的開發環境中,電子郵件實際上是在發送? :-) –

+0

是的,它是發送 - 如在,我可以發送一個給我的同事在他的工作電子郵件地址,它顯示在他的雷鳥箱 - 從開發。 – nilatti