「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"}