在這裏搜索了其他類似的問題,它們似乎都與某種格式錯誤的請求有關(不提供id
,或者不包括params正確),但那些不似乎是我遇到的問題。Rails 5 Rspec ActionController :: UrlGenerationError
這條路線絕對存在,去瀏覽器中的路由工作得很好。頁面加載,一切。但是由於某種原因,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錯誤的錯誤是非常無益的。我會非常感激任何其他想法。
這實際上是一個重複的:https://stackoverflow.com/questions/40978962/testing-singular-resource-controller-with-rspec – coreyward