我有一个测试用例:
#spec/features/post_spec.rb
require 'spec_helper'
describe "Posts" do
subject { page }
describe "edit" do
post=FactoryGirl.create(:post)
puts post.valid?
puts post_path(post.id)
puts post.id
before { visit edit_post_path(post.id) }
it {should have_content('Editing')}
it {current_path.should == edit_post_path(post.id)}
end
end
我在通过路由系统生成 URL 时遇到问题:
$rspec spec/features/posts_spec.rb
true
81
FF
Failures:
1) Posts edit
Failure/Error: before { visit edit_post_path(post.id) }
ActionController::UrlGenerationError:
No route matches {:action=>"edit", :controller=>"posts", :locale=>81, :id=>nil, :format=>nil} missing required keys: [:id]
# ./spec/features/2posts_spec.rb:13:in `block (3 levels) in <top (required)>'
2) Posts edit
Failure/Error: before { visit edit_post_path(post.id) }
ActionController::UrlGenerationError:
No route matches {:action=>"edit", :controller=>"posts", :locale=>81, :id=>nil, :format=>nil} missing required keys: [:id]
# ./spec/features/2posts_spec.rb:13:in `block (3 levels) in <top (required)>'
Finished in 0.00592 seconds
2 examples, 2 failures
Failed examples:
rspec ./spec/features/2posts_spec.rb:15 # Posts edit
rspec ./spec/features/2posts_spec.rb:16 # Posts edit
Randomized with seed 6503
如您所见,id
生成链接中不存在该参数,而语言环境参数具有该id
参数!我不知道。这是非常无人看管的行为。
更新:我尝试post
在post.id
. edit_post_path
这是结果:
$rspec spec/features/posts_spec.rb
true
83
FF
Failures:
1) Posts edit
Failure/Error: before { visit edit_post_path(post) }
ActionController::UrlGenerationError:
No route matches {:action=>"edit", :controller=>"posts", :locale=>#<Post id: 83, title: "Vel Voluptas Veniam Ea Neque", autor: "Christina Rogahn", img_path: "Ut Iste Dolore", body: "Adipisci cupiditate eum eum deleniti facilis. Itaqu...", created_at: "2013-10-28 17:26:30", updated_at: "2013-10-28 17:26:31", email: "candelario@abernathy.name", user_id: 1>, :id=>nil, :format=>nil} missing required keys: [:id]
# ./spec/features/2posts_spec.rb:13:in `block (3 levels) in <top (required)>'
2) Posts edit
Failure/Error: before { visit edit_post_path(post) }
ActionController::UrlGenerationError:
No route matches {:action=>"edit", :controller=>"posts", :locale=>#<Post id: 83, title: "Vel Voluptas Veniam Ea Neque", autor: "Christina Rogahn", img_path: "Ut Iste Dolore", body: "Adipisci cupiditate eum eum deleniti facilis. Itaqu...", created_at: "2013-10-28 17:26:30", updated_at: "2013-10-28 17:26:31", email: "candelario@abernathy.name", user_id: 1>, :id=>nil, :format=>nil} missing required keys: [:id]
# ./spec/features/2posts_spec.rb:13:in `block (3 levels) in <top (required)>'
Finished in 0.00532 seconds
2 examples, 2 failures
Failed examples:
rspec ./spec/features/2posts_spec.rb:14 # Posts edit
rspec ./spec/features/2posts_spec.rb:15 # Posts edit
Randomized with seed 32039
这是我的 routes.rb 文件:
#config/routes.rb
SitoNegozio::Application.routes.draw do
scope "(:locale)", locale: /it|en/ do
devise_for :users , controllers: {omniauth_callbacks: "users/omniauth_callbacks"}
resources :users
resources :posts do
resources :msgs
end
root :to => 'static_pages#index'
end
end
解决了:
#https://github.com/rspec/rspec-rails/issues/255#issuecomment-24698753
config.before(:each, type: :feature) do
default_url_options[:locale] = I18n.default_locale
end