2012-11-12 66 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 
相关问题