编写规范检查控制器授权登录的current_user使用上述操作的最简单方法是显式编写两个规范,检查具有权限的用户是否可以运行该操作,而另一个则不能。例如:
# The controller action:
def some_action
authorize! :do_this_action, @some_object
end
# The spec:
it "should work when authorized" do
sign_in @user
get :some_action
response.should be_success
end
it "should not work when not authorized" do
sign_in @other_user
get :some_action
response.should_not be_success
end
但这并不是很好,因为它需要大量的代码(两个或更多规范)并且实际上并不直接测试正在检查授权(在示例中为do_this_action
)。
我希望能够编写一个更简单的规范,例如(使用'rr'进行模拟的示例)
it "should check the user can do_this_action" do
mock(controller).authorize!(:do_this_action, some_object)
get :some_action
end
我认为这会更短,并直接测试我想要使用的授权检查正在运行。但是,我无法弄清楚如何编写模拟。 mock(controller)
不正确,模拟ApplicationController
或Ability
似乎也无效。
我该如何编写这种模拟?
答案 0 :(得分:0)
我认为最好在另一个规范中测试授权,例如ability_spec.rb,以便您分离他们的职责。通过这样做,您将不必测试在不同控制器上使用的相同授权方法。
继承了其他details
答案 1 :(得分:0)
事实证明我在上面写作的方式......早就必须有一个错字。
所以,检查一下授权!在控制器中调用check,你只需要写:
it "should check the user can do_this_action" do
mock(controller).authorize!(:some_action, some_object)
get :some_action
end