0

「controllers/api/v1/bookings_controller.rb」に配置されている REST API コントローラーの 1 つをテストしようとしています。ここでわかるように、コントローラーは現時点ではresponds_to jsonのみです。

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

  def create
    ...
  end 
end

私の機能テストは「test/functional/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

ただし、テストを実行すると、デフォルト ルートが使用されているように見えます (以下のエラー メッセージを参照)。テストで正しいルートを指定するにはどうすればよいですか? または、ここに表示されていない他の間違いがありますか?

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

2 に答える 2

2

ルートにはuser_idパラメーターが必要です。投稿に追加します。

post :create, :user_id => @user.id, :booking => {}, :format => :json
于 2012-11-13T10:17:45.017 に答える
0

わかりました、私は今それを理解したと思います。ユーザーIDを追加する必要がありました。そうしないと、レールが正しいルートを選択していないようです。したがって、正しいテスト方法は次のようになります。

  test "should return a bad request" do  
    post :create, :user_id => @user.id, :booking => { }, :format  => 'json'
    assert_response :bad_request
  end
于 2012-11-13T10:33:40.477 に答える