Я хочу проверить свой API с RSpec.Вложенный API: ActionController :: UrlGenerationError - Нет совпадений маршрутов
Api :: V1 :: EventsController существует и имеет метод создания. Я использую simple_token_authentication и pundit для обеспечения безопасности.
routes.rb
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
# users/
resources :users, only: [:show, :update] do
# users/:id/events/
resources :events
end
end
end
end
Spec:
RSpec.describe Api::V1::EventsController, type: :controller do
describe 'events#create' do
before {
@user = User.create(email: '[email protected]', password: '12345678', password_confirmation: '12345678')
@user.reload
}
it 'should 401 if bad credentials' do
# Given the user
# When
post "/api/v1/users/#{@user.id}/events", {},
{
'x-user-email' => 'toto',
'x-user-token' => 'toto'
}
# Then
expect_status 401
end
end
end
И я получаю эту ошибку:
Failure/Error: post "/api/v1/users/#{@user.id}/events", {},
ActionController::UrlGenerationError:
No route matches {:action=>"/api/v1/users/1/events", :controller=>"api/v1/events"}
EDIT и ответ: Я был смущен и я использовал Rspec контроллер когда я хотел использовать запрос rspec. Вот мой рабочий пример:
RSpec.describe Api::V1::EventsController, type: :controller do
describe 'events#create' do
before {
@user = User.create(email: '[email protected]', password: '12345678', password_confirmation: '12345678')
@user.reload
}
it 'should 401 if bad credentials' do
# Given the user
# When
post "/api/v1/users/#{@user.id}/events", {}.to_json,
{
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'x-user-email' => 'toto',
'x-user-token' => 'toto'
}
# Then
expect_status 401
end
end
end
пробег реки маршруты чтобы узнать, какие существующие маршруты доступны. – hamitron