как сделать тестирование макетов рельсов, когда они вызывают url_for - PullRequest
2 голосов
/ 21 июля 2011

У меня есть тестовый пример, который проверяет макет. Он проверяет наличие или отсутствие определенных ссылок для разных типов пользователей (например, административных ссылок). Это работало нормально, пока мы не начали локализовывать некоторые из наших интерфейсов.

describe "layouts/application" do
  include Devise::TestHelpers
  fixtures :users

  it "renders admin link for admin user" do
    @admin = users(:admin)
    sign_in(@admin)
    @locale = 'en'
    render
    rendered.should match(/Administration/)
  end
end

Макет теперь содержит вызов <% = toggle_language%>, который использует url_for для создания URL-адреса, подобного текущему, но с измененным параметром: locale:

def toggle_language
  case locale
  when :fr
    other=:en
  when :en
    other=:fr
  else
    other=:fr
  end
  link_to t(:other_language), url_for(:locale => other)
end

Проблема в том, что, поскольку у меня нет контроллера с именем "layout", url_for не может сгенерировать то, что ему нужно.

1) layouts/application renders admin link for admin user
 Failure/Error: render
 ActionView::Template::Error:
   No route matches {:controller=>"layouts", :locale=>:fr, :action=>"application"}

Я посмотрел, возможно, команда rspec render выполнит: controller,: действие, которое я мог бы указать на действительный маршрут. Я еще не нашел такой вещи.

1 Ответ

0 голосов
/ 21 июля 2011

Да, это работает очень хорошо.

...