У меня есть маршрут, который выглядит следующим образом в моем приложении Rails:
Rails.application.routes.draw do
scope module: "api" do
namespace :v1 do
# snip
post "my_route", to: "my_controller#my_action"
Я пытаюсь написать тест контроллера для этого действия:
RSpec.describe Api::V1::MyController, type: :controller do
describe "POST my_route" do
it "should respond with a 200 status" do
post "api/v1/my_route"
expect(response.status).to eq(200)
end
end
end
Когда я делаю это, мой тест не проходит с ошибкой ActionController::UrlGenerationError
.
Какую строку мне следует использовать в моем вызове post
, чтобы RSpec правильно соответствовал моему маршруту, когда он имитирует запрос? (Обратите внимание, что мой контроллер находится в модуле Api::V1
; я не уверен, имеет ли это значение или нет.)
Я пробовал:
"api/v1/my_route"
"/api/v1/my_route"
"v1/my_route"
"/v1/my_route"
"my_route"
"/my_route"
Я получаю ту же ошибку со всеми этими строками, и я не уверен, чего еще можно ожидать.
Есть много других вопросов о UrlGenerationError
в тестах RSpec. Никто из них не помог мне, потому что все они, кажется, используют встроенные маршруты Rails, такие как :index
или :create
. Я указал свои действия и маршрут напрямую, поэтому я не могу полагаться на столько магии Rails.
Я полагаю, что если бы я знал, какой формат RSpec ожидает от меня для строки пути, которую я передаю post
, я смог бы выяснить это очень быстро. К сожалению, мне было трудно найти соответствующие документы. Кажется, что большая часть документации RSpec основана на демонстрации тестов, и опять же, поскольку я не использую много магии Rails, их примеры не показывают мне, что я должен делать. Какой формат строки URL я должен использовать? Не могли бы вы указать мне соответствующие документы?