在这里搜索了其他类似的问题,它们似乎都与某种格式错误的请求有关(不提供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