У меня есть тестовый пример, который проверяет макет. Он проверяет наличие или отсутствие определенных ссылок для разных типов пользователей (например, административных ссылок). Это работало нормально, пока мы не начали локализовывать некоторые из наших интерфейсов.
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,: действие, которое я мог бы указать на действительный маршрут. Я еще не нашел такой вещи.