如何使用 email_spec gem 和 cucumber 测试 Devise 电子邮件的内容?

How to test content of Devise emails with email_spec gem and cucumber?

我正在学习如何使用 cucumber 和电子邮件规范测试电子邮件的生成和发送 gem。

我已经安装了 gem 并生成了 email_steps.rb 文件。

但是 ActionMailer::Base.deliveries 数组总是显示为空,因此我无法测试电子邮件。

我的场景是这样的:

Background:
    Given I visit the User Registration page

  Scenario: Happy Path - Seccessful Sign Up
    And I fill in the User Registration form correctly
    And I click Register
    Then I am redirected to the Users index page
    And I can see email confirmation notification
    And "John89@example.com" should receive an email 
    When I open the email with subject "Confirmation instructions"
    And I follow "Confirm my account" in the email
    And I am redirected to the Sign In page
    And I fill in the Sign In form correctly
    And I click Log In
    Then I am redirected to the Home page
    And I can see "Signed in successfully" notification

它在

上失败了
And "John89@example.com" should receive an email with subject "Confirmation instructions"

我在开发环境中查到邮件是用开信刀gem发送的,但不知道为什么在测试环境中没有被

Then /^(?:I|they|"([^"]*?)") should receive (an|no|\d+) emails?$/ do |address, amount|
  unread_emails_for(address).size.should == parse_email_count(amount)
end

来自电子邮件规范的步骤 gem。

是否缺少某些配置设置?

问题是我设置了

  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

开发环境但不在测试环境,这意味着在测试环境,尽管在开发环境.

中手动执行时看起来不错

这是主要问题,第二个小问题是我的电子邮件地址中有一个大写字母,在发送时被小写。这意味着当电子邮件规范 gem 查找电子邮件时找不到匹配项,因为它们不完全匹配(交付数组中的那个被小写了)。

一个很好的调试方法是在 cucumber 中设置调试页面的步骤定义,如下所示:

Then(/^show me the page$/) do
  save_and_open_page
end

这让您可以在浏览器中查看当前页面,这让我可以看到错误消息并找出问题所在。

如果以后有人遇到同样的事情,我希望能有所帮助