путь не работает должным образом при использовании капибары - PullRequest
9 голосов
/ 22 марта 2011

Я использую рельсы 3.0.5, rspec2 с последней капибарой.

Маршруты настройки как:

scope "(:locale)", :locale => /de|fr|it|en/ do
  resources :dossiers
end

В application_controller у меня есть это:

def default_url_options(options={})
  options[:locale] = "es"
  options
end

Так что, на мой взгляд, я могу использовать

link_to 'test', dossier_path(1)

без проблем.

Но когда я делаю то же самое во время посещения капибары, он пытается использовать 1 для локали, а не для идентификатора. Работает только когда я использую

visit dossier_path(nil, 1)

или

visit dossier_path(:id => 1)

Но оба безобразны и выглядят как грязный хакер. Итак, почему мне нужно использовать этот грязный хак и что я должен делать, чтобы я мог использовать методы пути, как в представлениях (так что без грязного хака с добавлением nil или явной передачей: id =>. ..)? :)

Ответы [ 4 ]

7 голосов
/ 07 октября 2011

Я столкнулся с подобной проблемой.Вы можете установить default_url_options в блоке before, как это в спецификации запроса:

 before :each do
   app.default_url_options = { :locale => :es }
 end
2 голосов
/ 18 августа 2012

Я использую рельсы 3.2.6 и использую технику, которую я нашел здесь https://github.com/rspec/rspec-rails/issues/255 под комментарием Фоета.Просто поместите это где-нибудь в / spec / support, и оно должно охватывать все ваши спецификации

class ActionView::TestCase::TestController
  def default_url_options(options={})
    { :locale => I18n.default_locale }
  end
end

class ActionDispatch::Routing::RouteSet
  def default_url_options(options={})
    { :locale => I18n.default_locale }
  end
end
2 голосов
/ 17 августа 2011

К сожалению, генерация маршрута происходит вне Application Controller. И Capybara не использует магию для предоставления опций по умолчанию для URL-адресов для маршрутизации помощников.

Но вы можете указать локаль по умолчанию внутри ваших маршрутов.

scope "(:locale)", :locale => /de|fr|it|en/, :defaults => { :locale => "es" } do
  resources :dossiers
end

А теперь, если вы не передадите опцию: locale помощнику по маршруту, по умолчанию будет "es". На самом деле больше нет необходимости хранить def default_url_options в контроллере.

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

Напротив, как показано здесь под Использование Capybara с RSpec единственный способ, которым я смог заставить его работать, - это написать

visit user_path(:id => myuser.id.to_s)

, так что для васэто должно быть

visit dossier_path(:id => "1")

Это работает?

...