如何测试由Rails Controller Concern添加的路由

我试图通过关注测试添加到控制器的路由。 我想写一个验收测试,其中包含关注者在控制器中的路线,以避免回归以及记录关注的用例。 这有意义吗? 如果是这样,那么如何通过测试中的关注访问添加到控制器的路由?

以下是我的应用程序路线的精简版。 在运行应用程序时, permissionable关注路线按预期工作。

#routes.rb
routes.draw do
  concern :permissionable do
    member do
      get 'permission', action: "permission_show"
     end
  end

  resources :profiles, concerns: :permissionable
end

以及我的控制器关注的简化版本,这是我的ProfilesController包含的

module PermissionActions
  extend ActiveSupport::Concern

  def permission_show
    if current_user.admin?
      render :text => "you have permissions for this entity"
    end
    render :text => "No permission for this entity"
  end

   def test_a_thing
      "test"
  end
end

最后,感谢这个问题的答案,我的rspec示例看起来像这样。

describe ApplicationController, type: :controller do
  controller do
    include PermissionActions

    def index; end
  end

  describe 'a controller with permission actions' do
    it 'can call a method' do
      expect(@controller.test_a_thing()).to eq("test")
    end

    it 'exposes a permission route' do
      get :permission
    end
  end
end

第一个例子有效,但第二个例子抱怨No route matches {:action=>"permission", :controller=>"anonymous"}

我尝试了太多的东西在这里列出所有的东西,但我认为的解决方案肯定会在测试中重新绘制路线,如下所示:

...
it 'exposes a permission route' do
  routes.draw {
    concern :permissionable do
      member do
        get 'permission', action: "permission_show"
      end
    end
    resources :anonymous, concerns: :permissionable
  }

  # response = @controller.permission_show()
  get :permission, :id => "anyId"

  expect(response).to have_http_status(200)
end
链接地址: http://www.djcxy.com/p/47197.html

上一篇: How to test routes added by a Rails Controller Concern

下一篇: filters in Rails controller and concerns