如何测试Rails Controller关注添加的路由

时间:2017-08-15 02:37:31

标签: ruby-on-rails ruby-on-rails-4 rspec rspec-rails

我正试图通过关注来测试添加到控制器的路线。我想编写验收测试,其中包括控制器中的关注路径,以避免回归并记录关注的用例。这有意义吗?如果是这样,如何通过测试中的关注来访问添加到控制器的路径?

以下是我的应用程序路线的精简版本。 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

最后,感谢答案in this question,我的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

0 个答案:

没有答案