Именованные маршруты в тестах ActionMailer - PullRequest
1 голос
/ 18 ноября 2011

Я отправляю приглашения по электронной почте со ссылкой для подтверждения. В своем функциональном тесте я хочу проверить, содержит ли тело письма правильный 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 Ответ

3 голосов
/ 18 ноября 2011

Вы можете включить динамически генерируемый модуль помощников по URL, а затем использовать любой определенный по нему помощник по URL, например:

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
...