2012-06-19 32 views
12

Đối với thử nghiệm của tôi, tôi đã điều sau đây:thử nghiệm nói không phù hợp tuyến đường, nhưng họ làm việc trong trình duyệt

test "should update holder" do 
     holder = Holder.create(name: "name", user_id: 10) 
     put :update, holder: holder 
    assert_redirected_to holder_path(assigns(:holder)) 
end 

Và khi tôi chạy chúng tôi nhận được thông báo lỗi sau:

ERROR (0:00:00.185) test_should_update_holder 
    No route matches {:holder=>"980190963", :controller=>"holders", :action=>"update"} 
     @ /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:532:in `raise_routing_error' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:528:in `rescue in generate' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:520:in `generate' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:561:in `generate' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:557:in `generate_extras' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:553:in `extra_keys' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_controller/test_case.rb:147:in `assign_parameters' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_controller/test_case.rb:453:in `process' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_controller/test_case.rb:49:in `process' 
      /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_controller/test_case.rb:390:in `put' 
      test/functional/holders_controller_test.rb:36:in `block in <class:HoldersControllerTest>' 
      /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/testing/setup_and_teardown.rb:35:in `block in run' 
      /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:458:in `_run__4148286245602197272__setup__4285546581512185515__callbacks' 
      /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback' 
      /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_setup_callbacks' 
      /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks' 
      /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/testing/setup_and_teardown.rb:34:in `run' 

Nhưng trong tôi tuyến tôi có:

Teacherjoy::Application.routes.draw do 
    get "users/new" 

    resources :questions 
    resources :pages 
    resources :holders 
    resources :users 
    resources :sessions, only: [:new, :create, :destroy] 
    root :to => 'pages#home' 

    match '/signup', to: 'users#new' 
    match '/signin', to: 'sessions#new' 
    match '/signout', to: 'sessions#destroy', via: :delete 
end 

và các tuyến đường cào trả:

[teacherjoy (master)]$ rake routes 
    users_new GET /users/new(.:format)   users#new 
    questions GET /questions(.:format)   questions#index 
       POST /questions(.:format)   questions#create 
new_question GET /questions/new(.:format)  questions#new 
edit_question GET /questions/:id/edit(.:format) questions#edit 
    question GET /questions/:id(.:format)  questions#show 
       PUT /questions/:id(.:format)  questions#update 
       DELETE /questions/:id(.:format)  questions#destroy 
     pages GET /pages(.:format)    pages#index 
       POST /pages(.:format)    pages#create 
    new_page GET /pages/new(.:format)   pages#new 
    edit_page GET /pages/:id/edit(.:format)  pages#edit 
     page GET /pages/:id(.:format)   pages#show 
       PUT /pages/:id(.:format)   pages#update 
       DELETE /pages/:id(.:format)   pages#destroy 
     holders GET /holders(.:format)   holders#index 
       POST /holders(.:format)   holders#create 
    new_holder GET /holders/new(.:format)  holders#new 
    edit_holder GET /holders/:id/edit(.:format) holders#edit 
     holder GET /holders/:id(.:format)  holders#show 
       PUT /holders/:id(.:format)  holders#update 
       DELETE /holders/:id(.:format)  holders#destroy 
     users GET /users(.:format)    users#index 
       POST /users(.:format)    users#create 
    new_user GET /users/new(.:format)   users#new 
    edit_user GET /users/:id/edit(.:format)  users#edit 
     user GET /users/:id(.:format)   users#show 
       PUT /users/:id(.:format)   users#update 
       DELETE /users/:id(.:format)   users#destroy 
    sessions POST /sessions(.:format)   sessions#create 
    new_session GET /sessions/new(.:format)  sessions#new 
     session DELETE /sessions/:id(.:format)  sessions#destroy 
     root  /       pages#home 
     signup  /signup(.:format)    users#new 
     signin  /signin(.:format)    sessions#new 
     signout DELETE /signout(.:format)   sessions#destroy 

Nếu bạn nhìn vào các tuyến đường cào, rõ ràng là một hành động để cập nhật, đó là đặt, trong bộ điều khiển chủ sở hữu, đó là những gì thử nghiệm của tôi đang làm, phải không?

Trả lời

16

Lưu ý rằng tuyến đường thực sự là PUT /holders/:id, nhưng bạn đang chuyển một tùy chọn :holder đến phương thức put của mình, không phải là :id. Hãy thử thay đổi dòng đó trong thử nghiệm của bạn thành điều này:

put :update, id: holder 
+3

Đây chính xác là những gì tôi cần! Câu trả lời này khó tìm thấy trên google vì vậy hy vọng những từ khóa này sẽ giúp: "đường ray ruby ​​phù hợp với thử nghiệm chức năng tuyến đường 'Không phù hợp với tuyến đường'" – cmyers

+1

Tuyệt vời. Làm việc cho tôi nữa. –

Các vấn đề liên quan