2

我的应用程序发送包含绝对 URL 的电子邮件。

我在 config/environment/development.rb 中设置了主机

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

现在我想测试电子邮件是否包含有效的 url。使用正则表达式,我从电子邮件中取出完整的 url,并希望使用 Capybara 函数访问该地址。

mail = ActionMailer::Base.deliveries.last
address = mail.body.to_s[%r{http.+/edit}]
visit address;

但我不知道应该在 config/environment/test.rb 中设置什么主机

当我设置 localhost:3000 时,它会尝试连接到由rails server命令启动的本地服务器。

你有什么想法来解决这个问题吗?

4

4 回答 4

4

什么对我有用:

Capybara.server_port = 3005

(见https://github.com/vangberg/capybara/commit/5784f03d6aa87e63e759abda794a43738e4f320f

config.action_mailer.default_url_options = { :host => 'localhost:3005' }
于 2011-11-04T16:11:45.497 回答
2

要在无法对 Capybara 端口进行硬编码时启用此功能(例如并行规范),请将其放入您的 spec_helper.rb

 YourApp::Application.config.action_mailer.default_url_options[:host] = "localhost:#{Capybara.server_port}"
于 2013-03-19T04:58:12.320 回答
0

与其访问 URL,为什么不直接根据 RegEx 验证它,而是确保它有效、编码正确、指向正确的控制器。

您可能不想实际与服务器交互,如果您不想与生产服务器交互,那么 localhost:3000 是一个不错的选择

于 2011-07-21T16:10:40.650 回答
0

嘿,这里是可怕的代码片段,也许可以帮助你。我使用email_spec来简化规范和黄瓜场景中的电子邮件处理,它已经有一些帮助程序来简化你的任务。在我的应用程序中,我遇到了更复杂的情况,所以我被迫编写自己的解析器。这是代码。享受:)

于 2011-07-23T14:02:44.523 回答