我的应用程序发送包含绝对网址的电子邮件。
我在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
命令启动的本地服务器。
你有什么想法来解决这个问题吗?
答案 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。享受:)