Rails,测试邮件网址

时间:2011-07-21 16:07:03

标签: ruby-on-rails rspec capybara host mailer

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

我在config / environment / development.rb

中设置了主机
config.action_mailer.default_url_options = { :host => 'localhost:3000' }

现在我想测试电子邮件是否包含有效网址。使用正则表达式我从电子邮件中取出完整的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 个答案:

答案 0 :(得分:4)

对我有用的是什么:

Capybara.server_port = 3005

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

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

答案 1 :(得分:2)

要在硬编码Capybara端口不可选时(例如并行规格)启用此功能,请将其放入spec_helper.rb

 YourApp::Application.config.action_mailer.default_url_options[:host] = "localhost:#{Capybara.server_port}"

答案 2 :(得分:0)

除了访问URL之外,为什么不仅仅针对RegEx验证它,请确保它有效,编码正确,指向正确的控制器。

您可能不希望实际与服务器进行交互,如果您不是生产服务器,那么localhost:3000是一个goo选项

答案 3 :(得分:0)

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