每次"www.example.com"黄瓜default_url_options [:host]即使在environtemnts/test.rb中指定

Bvu*_*Ic7 5 ruby routing ruby-on-rails url-rewriting

我在环境/ test.rb中指定了default_url_options

config.action_mailer.default_url_options = { :host => "www.xyu.at" }
Run Code Online (Sandbox Code Playgroud)

这是非常好的,在我的黄瓜故事中,我测试用户注册,用户激活链接生成正确

invitation_activation_url(1)
=> "www.xyu.at/signup/1231hj23jh23"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试按照电子邮件中提供的链接时,使用features/steps/user_steps.rb中的以下代码(使用来自http://github.com/bmabey/email-spec/tree/master的 email-rspec ):

When /^I follow the invitation link$/ do
  When 'I follow "'+invitation_activation_url(1) + '" in the email'
end
Run Code Online (Sandbox Code Playgroud)

这里使用default-host创建url:

invitation_activation_url(1)
=> "www.example.com/signup/1231hj23jh23"
Run Code Online (Sandbox Code Playgroud)

有谁能够帮我?我不知道我做错了什么......

谢谢!

编辑:

这似乎与该方法有关

current_url
Run Code Online (Sandbox Code Playgroud)

但我不知道它来自哪里..?

编辑:

我在我的features/support/env.rb中指定了正确的环境

ENV["RAILS_ENV"] ||= "test"
Run Code Online (Sandbox Code Playgroud)

编辑:

我的临时解决方案是,edbond说,

invitation_activation_url(1, :host => "www.xyz.at")
  => "www.xyz.at/signup/1231hj23jh23"
Run Code Online (Sandbox Code Playgroud)

但我不想以这种方式明确命名域名(我已经在我的环境/ test.rb文件中指定了它 - 这样它就不会干了)

edb*_*ond 1

在您的网址中使用 :host 选项。

invitation_activation_url(1, :host => "www.xyz.at")
  => "www.xyz.at/signup/1231hj23jh23"
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以解析电子邮件正文并获取链接

  mail = YourMailer.deliveries.last
  email_html = Nokogiri::HTML mail.body.to_s
  approve_link = email_html.at_css("a")["href"]
Run Code Online (Sandbox Code Playgroud)