ActionMailer测试中的命名路由

时间:2011-11-18 18:13:49

标签: ruby-on-rails ruby-on-rails-3 actionmailer

我通过电子邮件发送包含确认链接的邀请。在我的功能测试中,我想检查邮件正文是否包含正确的URL,如下所示:

class InvitationSenderTest < ActionMailer::TestCase
  test "invite" do
    ...
    url = new_user_url(:www_host => 'localhost', :confirm_key => invitation.confirm_key)
    assert_match /http:\/\/localhost#{url}/, mail.body.encoded
  end
end

在以url =开头的行上,测试收到错误undefined method 'new_user_url',而在ActionController测试中,同一行没有问题。

我尝试插入行:

include ActionDispatch::Routing
include ActionView::Helpers::UrlHelper

在类定义中,但无济于事。我也尝试使用url_for,但这也不起作用(“未定义的局部变量或方法'_routes'”)。我想我需要一些导入,但是哪个?

1 个答案:

答案 0 :(得分:3)

您可以包含动态生成的url helpers模块,然后使用它定义的任何url helper,如下所示:

class InvitationSenderTest < ActionMailer::TestCase
  include Rails.application.routes.url_helpers

  test "invite" do
    ...
    url = new_user_url(:www_host => 'localhost', :confirm_key => invitation.confirm_key)
    assert_match /http:\/\/localhost#{url}/, mail.body.encoded
  end
end