Ruby on rails Rails,测试邮件url

Ruby on rails Rails,测试邮件url,ruby-on-rails,rspec,capybara,host,mailer,Ruby On Rails,Rspec,Capybara,Host,Mailer,我的应用程序发送包含绝对URL的电子邮件 我在config/environment/development.rb中设置了主机 config.action_mailer.default_url_options = { :host => 'localhost:3000' } 现在我想测试电子邮件是否包含有效的url。使用正则表达式,我从电子邮件中取出完整的url,并希望使用Capybara函数访问此地址 mail = ActionMailer::Base.deliveries.last ad

我的应用程序发送包含绝对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
命令启动的本地服务器


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

与其访问URL,不如根据正则表达式验证它,确保它有效、编码正确、指向正确的控制器


您可能不想实际与服务器交互,如果您不想与生产服务器进行交互,那么localhost:3000是一个不错的选择。我曾经在规范和场景中简化处理电子邮件,它已经有了一些帮助工具来简化您的任务。在我的应用程序中,我有一个更复杂的情况,所以我不得不编写自己的解析器。这是你的电话号码。享受:)

对我有用的东西:

Capybara.server_port = 3005
(见附件)


若要在硬编码Capybara端口不是一个选项(例如并行规范)时启用此功能,请将其放入spec_helper.rb中

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

测试环境已准备好处理此请求,我想访问此地址。我认为唯一的方法是将URL转换为实际路径。如果地址是字符串对象,有没有一个好方法可以做到这一点?使用URI.parse(String)获取一个URI对象,然后更改它的主机,然后将它作为字符串吐出。
 YourApp::Application.config.action_mailer.default_url_options[:host] = "localhost:#{Capybara.server_port}"