2012-11-12 2 views
0

"컨트롤러/api/v1/bookings_controller.rb"에 배치 된 내 REST API 컨트롤러 중 하나를 테스트하려고합니다. 당신은 여기에서 볼 수있는 순간에만 JSON responds_to 컨트롤러 :레일 테스트, 게시물에 대한 경로를 지정하는 방법? (경로와 일치하는 경로 없음)

내 기능 시험은 "시험/기능/API/V1/bookings_controller_test.rb"에 위치하며, 다음과 같이 표시됩니다
class Api::V1::BookingsController < ApplicationController 
    respond_to :json 
    before_filter :authenticate_user! 
    before_filter :get_user 

    def create 
    ... 
    end 
end 

:

require 'test_helper' 

class Api::V1::BookingsControllerTest < ActionController::TestCase 
include Devise::TestHelpers 

    setup do 
    @booking = bookings(:one) 
    @user = users(:one) 
    sign_in @user 
    end 

    test "should return a bad request" do 
    post :create, :booking => { }, :format => 'json' 
    assert_response :bad_request 
    end 

end 
을 는 예약을 만들기위한 포스트 경로는 다음과 같습니다 (및 HTTP 클라이언트 테스트, 작동)

: 나는 테스트를 실행할 때

api_v1_user_bookings 
GET /api/v1/users/:user_id/bookings(.:format) api/v1/bookings#index 
POST /api/v1/users/:user_id/bookings(.:format) api/v1/bookings#create 

그러나 (오류 MES를 참조 몇 가지 기본 경로를 사용하는 것 현자), 어떻게하면 테스트에서 올바른 경로를 지정할 수 있습니까? 아니면 여기서 볼 수없는 다른 실수가 있습니까?

test_should_return_a_bad_request(Api::V1::BookingsControllerTest): 
ActionController::RoutingError: No route matches {:booking=>{}, :format=>"js 
on", :controller=>"api/v1/bookings", :action=>"create"} 

답변

2

경로에 user_id 매개 변수가 있어야합니다. 귀하의 게시물에 추가하십시오 :

post :create, :user_id => @user.id, :booking => {}, :format => :json 
+0

앗 남자, 감사, 그냥 몇 초 전 혼자 그것을 알아 냈다! –

0

좋아, 지금 생각해 봤어. 방금 user-id를 추가해야했습니다. 그렇지 않으면 레일스가 올바른 경로를 선택하지 않은 것으로 보입니다. 그래서 올바른 시험 방법은 다음과 같습니다 감사 그럼에도 불구하고 D :

test "should return a bad request" do 
    post :create, :user_id => @user.id, :booking => { }, :format => 'json' 
    assert_response :bad_request 
    end