컨트롤러가 로그인 된 current_user에게 해당 작업을 사용하도록 권한을 부여하는지 확인하는 가장 간단한 방법은 명시 적으로 권한이있는 사용자가 해당 작업을 실행할 수 있고 다른 사용자는 실행할 수 없는지 확인하는 두 가지 사양을 명시 적으로 작성하는 것입니다. 예를 들면 :CanCan의 "권한을 부여하십시오!" 컨트롤러 사양의 메소드?
# 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
) 확인되고 있음을 직접 테스트하지 않는 한이 큰되지 않습니다.
더 간단한 사양을 작성하고 싶습니다. 나는이 짧은 것 생각하고 직접 내가 사용하고자하는 인증 검사가 실행되고 있음을 테스트
it "should check the user can do_this_action" do
mock(controller).authorize!(:do_this_action, some_object)
get :some_action
end
(예를 사용하여 조롱 위해 'RR')를. 그러나, 나는 모의 쓰기 방법을 알아낼 수 없다. mock(controller)
이 맞지 않거나 조롱하는 ApplicationController
또는 Ability
이 작동하지 않는 것 같습니다.
어떻게 이런 모의 의사를 쓸 수 있습니까?
네, 리팩토링을 시도하는 것입니다. 올바른 권한 부여를 확인하고 싶습니다! check는 컨트롤러에서 호출되며 ability_spec.rb에서만 실제 인증 로직에 대한 엄격한 테스트를 거친다. – jay