我正试图通过关注来测试添加到控制器的路线。我想编写验收测试,其中包括控制器中的关注路径,以避免回归并记录关注的用例。这有意义吗?如果是这样,如何通过测试中的关注来访问添加到控制器的路径?
以下是我的应用程序路线的精简版本。 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