没有路由与 rspec 的匿名控制器匹配

2023-12-20

根据我的理解规格规格 http://relishapp.com/rspec/rspec-rails/v/2-1/dir/controller-specs/anonymous-controller,我希望下面的例子能够通过。

describe ApplicationController do

  controller do
    def test
    end
  end

  it "calls actions" do
    get :test
  end

end

相反,它失败了:

No route matches {:controller=>"anonymous", :action=>"test"}

我什至尝试在路由文件中定义“匿名”控制器的路由,但无济于事。我在这里缺少什么吗?这应该有效,不是吗?


为了在匿名控制器规范中使用自定义路由,您需要修改 before 块中设置的路由。 RSpec 已经使用设置了 RESTful 路由resources :anonymous在 before 块中,并在 after 块中恢复原始路由。因此,要获得自己的路线,只需调用draw on@routes并添加您需要的内容。

这是一个来自ApplicationController测试的规范rescue_from CanCan::AccessDenied

require 'spec_helper'

describe ApplicationController
  controller do
    def access_denied
      raise CanCan::AccessDenied
    end
  end

  before do
    @routes.draw do
      get '/anonymous/access_denied'
    end
  end

  it 'redirects to the root when access is denied' do
    get :access_denied
    response.should redirect_to root_path
  end

  it 'sets a flash alert when access is denied' do
    get :access_denied
    flash.alert.should =~ /not authorized/i
  end
end

Update

RSpec 2.12 左右对此的处理已得到改进。如果您使用 > 2.12 那么您不再需要挂钩@routes.

为匿名控制器绘制自定义路由 https://www.relishapp.com/rspec/rspec-rails/v/3-0/docs/controller-specs/anonymous-controller#draw-custom-routes-for-anonymous-controllers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有路由与 rspec 的匿名控制器匹配 的相关文章

随机推荐