2012-11-12 63 views
0

我嘗試測試一個位於「controllers/api/v1/bookings_controller.rb」的REST API控制器。此刻,你可以在這裏看到的控制器僅responds_to JSON:Rails測試,如何指定post的路徑? (沒有路由匹配錯誤)

class Api::V1::BookingsController < ApplicationController 
    respond_to :json 
    before_filter :authenticate_user! 
    before_filter :get_user 

    def create 
    ... 
    end 
end 

我的功能測試位於「測試/功能/ API/V1/bookings_controller_test.rb」,看起來像以下:

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

噢人,謝謝,只是理解了它由我自己幾秒鐘前:d 不過謝謝! –

0

好吧,我想我現在想通了。我只需要添加用戶id,否則似乎rails不會選擇正確的路線。所以,正確的測試方法是這樣的:

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