Просматривал другие подобные вопросы здесь, и все они, похоже, связаны с каким-то искаженным запросом (не предоставление id
или неправильное включение параметров), но это не похоже на проблема, с которой я сталкиваюсь.
Маршрут точно есть, переход по маршруту в браузере работает нормально. Страница загружается, все. Но Rspec почему-то выдает ошибку UrlGenerationError.
Я пытался вручную указать имя контроллера в маршрутах, перейти на контроллер во множественном числе и даже использовать другой (множественный) контроллер. Похоже, что где-то есть проблема с какой-то другой конфигурацией, но ошибка, связанная с ошибкой URLGeneration, крайне бесполезна. Буду очень признателен за любые другие идеи.
У нас есть спецификации контроллера API в другом месте нашего приложения, которые, похоже, работают правильно, но я не могу сказать, в чем разница в настройке между тем и этим.
Моя ошибка:
1) Spaceman::ReputationEnhancementsController GET show has a 200 status code
Failure/Error: get :show
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"spaceman/reputation_enhancements"}
# ./spec/controllers/spaceman/reputation_enhancements_controller_spec.rb:10:in `block (3 levels) in <top (required)>'
Finished in 1.14 seconds (files took 6.13 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/controllers/spaceman/reputation_enhancements_controller_spec.rb:9 # Spaceman::ReputationEnhancementsController GET show has a 200 status code
Маршруты:
Spaceman::Engine.routes.draw do
resource :reputation_enhancement, path: "reputation-enhancement", only: [ :show, :create ] do
get :filter
end
end
Тест: (Я пытался добавить здесь type: :controller
, а также полностью уточнить, добавить вместо него Rspec.describe
и т. д.)
require "rails_helper"
describe Spaceman::ReputationEnhancementsController do
describe "GET show" do
it "has a 200 status code" do
get :show
expect(response.status).to eq(200)
end
end
end
rake routes
filter_reputation_enhancement GET /reputation-enhancement/filter(.:format) spaceman/reputation_enhancements#filter
reputation_enhancement GET /reputation-enhancement(.:format) spaceman/reputation_enhancements#show
POST /reputation-enhancement(.:format) spaceman/reputation_enhancements#create
РЕДАКТИРОВАТЬ:
Я пытался вручную указать имя контроллера в маршрутах, перейти на контроллер во множественном числе и даже использовать другой (множественный) контроллер. Похоже, что где-то есть проблема с какой-то другой конфигурацией, но ошибка, связанная с ошибкой URLGeneration, крайне бесполезна. Буду очень признателен за любые другие идеи.
routes { Rails.application.routes }
работает. Есть ли удобный способ сделать это? Раздражает добавлять это для всего блокаdescribe
. 16.11.2017