使用水豚时路径不能正常工作

guc*_*cki 9 ruby-on-rails capybara rspec2

我正在使用rails 3.0.5,rspec2和最新的capybara.

路线设置如下:

scope "(:locale)", :locale => /de|fr|it|en/ do
  resources :dossiers
end
Run Code Online (Sandbox Code Playgroud)

在application_controller我有这个:

def default_url_options(options={})
  options[:locale] = "es"
  options
end
Run Code Online (Sandbox Code Playgroud)

所以在我的观点中我可以使用

link_to 'test', dossier_path(1)
Run Code Online (Sandbox Code Playgroud)

没有任何问题.

但是当我在capybara的访问中做同样的事情时,它会尝试使用1作为语言环境而不是id.它只在我使用时有效

visit dossier_path(nil, 1)
Run Code Online (Sandbox Code Playgroud)

要么

visit dossier_path(:id => 1)
Run Code Online (Sandbox Code Playgroud)

但两者都是丑陋的,看起来像一个肮脏的黑客.那么为什么我需要使用这个脏的hack以及我要做什么,以便我可以像在视图中一样使用路径方法(所以没有必须添加nil或显式传递的脏黑客:id =>. ..)?:)

小智 7

我遇到了类似的问题.您可以在请求规范中的before块中设置default_url_options:

 before :each do
   app.default_url_options = { :locale => :es }
 end
Run Code Online (Sandbox Code Playgroud)


Enr*_*sso -1

相反,如Using Capybara with RSpec所示,我能够让它工作的唯一方法是编写

visit user_path(:id => myuser.id.to_s)
Run Code Online (Sandbox Code Playgroud)

所以对你来说应该

visit dossier_path(:id => "1")
Run Code Online (Sandbox Code Playgroud)

有效吗?