Ruby on rails Can';带rspec的t测试控制器
在一个全新的Rails 5项目中,我在简单的rspec控制器测试中遇到了一个大问题 这是我的路线Ruby on rails Can';带rspec的t测试控制器,ruby-on-rails,rspec,routes,ruby-on-rails-5,rspec-rails,Ruby On Rails,Rspec,Routes,Ruby On Rails 5,Rspec Rails,在一个全新的Rails 5项目中,我在简单的rspec控制器测试中遇到了一个大问题 这是我的路线 Rails.application.routes.draw do get '/foo', to: 'application#foo' get '/bar', to: 'application#foo' end 这是我的ApplicationController.rb class ApplicationController < ActionController::Base def
Rails.application.routes.draw do
get '/foo', to: 'application#foo'
get '/bar', to: 'application#foo'
end
这是我的ApplicationController.rb
class ApplicationController < ActionController::Base
def foo
render html: 'foo', status: 200
end
def bar
render html: 'bar', status: 200
end
end
此输出导致测试失败:
1) ApplicationController can get bar
Failure/Error: get 'bar'
ActionController::UrlGenerationError:
No route matches {:action=>"bar", :controller=>"application"}
当我的浏览器可以找到我的/酒吧路线时,为什么rspec找不到
奇怪的是,如果我在routes.rb文件中更改该路由以使用bar操作:
get'/bar',to:'application#bar'
突然rspec找到了路线,测试通过了
不过,我需要对我的路由使用任意操作,因此遵循此模式以满足rspec不是一个选项。如何让rspec工作?您是否尝试过在浏览器中访问此路径(
get'/bar',到:'application#foo'
)吗?将控制器规范更改为请求规范,这是自rspec 3.5起在Rails中测试控制器的首选方法
由于在原始配置中没有将#bar
操作绑定到URL,因此会出现该错误。因此,当规范执行#bar
时,该操作没有URL
控制器规范并不像你想象的那样工作;没有任何东西试图请求您指定的路径。相反,它执行您在#bar
操作中编写的代码,并从响应中提取URL
为了缓解这种情况,您可以将规格类型:
更改为:request
,而不是:controller
然后你可以做:
RSpec.describe ApplicationController, type: :request do
it 'can get foo' do
get '/foo'
end
it 'can get bar' do
get '/bar'
end
end
太好了,thnx!我试图复制一些使用旧版本rspec的回购协议
RSpec.describe ApplicationController, type: :request do
it 'can get foo' do
get '/foo'
end
it 'can get bar' do
get '/bar'
end
end