3.2 레일즈 앱을 3.2에서 4.0.4로 업그레이드 할 때, 3.2 버전에서 완벽하게 작동하는 컨트롤러에 대한 테스트를했는데, 이제는 경로 일치 오류가 없습니다. 내 컨트롤러를 테스트 할 때 경로를 어떻게해야하는지 궁금합니다. 레일 4가있는 Rspec 테스트 컨트롤러
는이 같은 중첩 된 경로가 :이가 내 작업 컨트롤러의 사양에resources :projects, only: [:index, :show, :create, :edit], shallow: true do
resources :tasks, only: [:create, :index, :show, :edit, :update]
end
를, 그리고 레일 3.2에서 일하고, 업데이트 후 실패
RSpec에
describe 'with no project/id parameter' do
it 'json code is assigned to invalid parameters' do
params = valid_params
params.delete(:project_id)
post :create params
expect(assigns(:json_code)).to eq(INVALID_PARAMS)
end
end
그러나 업그레이드가 실패하면 다음 메시지가 표시됩니다.
ActionController::UrlGenerationError:
No route matches {:action=>"create", :controller=>"tasks", :format=>"json"}
이전 버전에서 경로가 평가되지 않는 것 같습니다. 나는 이것이 실제 escenario에서 겨우 일어날 수 있음을 알고 있지만, 우연히 그 action에 대한 route를 missmap하면 project_id param없이 action이 호출 될 가능성이있다.
그래서이 테스트를 작성하는 데있어 올바른 해결책이나 해결책은 무엇입니까?
당신이 맞습니다. 코드에서 send (동사, 경로, 매개 변수)와 같은 것을 가지고 있기 때문에 실수를 저질렀습니다. 나는 그것을 단순화 했으므로 게시물을 작성해야합니다. 그래서 나는 정말로 포스트라고 부르고있다. –
params 해시에서': project_id'를 삭제하면 경로가 일치하지 않으므로 항상 오류가 발생합니다. 'create' 액션은 절대로 호출되지 않습니다. –
예,하지만 4로 업그레이드하기 전에 레일 3.2에서 작동하는 이유는 무엇입니까? rspec은 레일 버전에서 루트를 평가하지 않습니까? –