テストケースがあります:
#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