2016-06-17 24 views
1

我的工作用黃瓜和水豚一些QA自動化打開,有一個步驟:如何訪問鏈接的電子郵件letter_opener寶石

When(/^I follow the reset password link in the email$/) do 
    last_email = ActionMailer::Base.deliveries.last 
    password_reset_url = last_email.body.match(/http.*\/users\/password\/edit.*$/) 
    visit password_reset_url 
end 

步驟失敗:

undefined method `body' for nil:NilClass (NoMethodError) 

此外,在第一行結果爲零後刪除binding.pry,結果爲last_email這很奇怪。

有沒有人有任何建議或想法,爲什麼這可能會發生在這裏?

+0

您是否找到解決方案? –

回答

3

如果您使用的是letter_opener,那麼電子郵件將不會發送給ActionMailer,並且正在不受Capybara控制的瀏覽器中打開。如果你想用水豚電子郵件工作,你應該看看水豚電子郵件gem而不是letter_opener。 Letter_opener更多地針對開發環境而不是測試

0

Tom Walpole's answer在內容上是絕對正確的,並且指向您的方向capybara-email gem

這裏是你如何可以改變你的代碼示例一個潛在的例子,假設你有另一個黃瓜一步,點擊了一個按鈕/鏈接發送重置密碼的說明:

When(/^I follow the reset password link in the email (.*)$/) do |email| 
    # finds the last email sent to the passed in email address. 
    # This also sets the `current_email` object, which you can think 
    # of as similar to Capybara's `page` object, but for an email. 
    open_email(email) 
    # Assuming the email link to change your password is called 
    # 'Change my password', you can just click it, just as you would 
    # on a Capybara `page`. 
    current_email.click_link 'Change my password' 
end 

點擊該鏈接後,您將採取任何page你可以繼續到fill_in 'New password', with: 'foobar'等,我假設你已經在另一個黃瓜步驟覆蓋。

相關問題