비 대한 컨트롤러 테스트를 발생 슈퍼 관리자 만 인덱스에 액세스 할 수 있는지 확인하기위한 네 가지 테스트. 이것을 테스트하는 더 좋은 방법이 있습니까? 다른 누구도 이런 종류의 일을 스스로 찾지 못했습니까? 난 레일 애플 리케이션을 만들 때마다 그것으로 실행됩니다.권한 부여 난 단지 슈퍼 관리자가 특정 작업에 액세스 할 수 있도록 필터를 가지고
1
A
답변
0
내 솔루션을 제공하는 단지입니다.
0
당신은 예
shared_example "allow super admins" do |actions|
actions.each do |action|
it "should let super admin access #{action}" do
login_super_admin
get action.to_sym
assert_response :success
end
end
end
shared example "deny non super admins" do |actions, users|
actions.each do |action|
users.each do |user|
it "should let not let #{user} access #{action}" do
send("login_#{user}")
get action.to_sym
assert_response :redirect
end
end
end
end
및 권한 부여 점검이 필요하여 테스트에서 공유 만들 수 있습니다, 당신은
it_behaves_like "allow super admins", ["index"]
it behaves_like "deny non super admins", ["index"], ["normal_admin", "user", "guest"]
PS 작업을 수행 할 수 있습니다 :이 테스트하지 않았습니다.
# Gemfile
gem 'shoulda-context'
# In test_helper.rb
class ActiveSupport::TestCase
def make_sure_authorization_kicks_in
assert_redirected_to root_url
assert_equal "You are not authorized to perform this action.", flash[:error]
end
end
# In controller tests
context "NOT Super Admin" do
# saves a lot of typing
teardown { make_sure_pundit_kicks_in }
context "just NORMAL ADMIN" do
setup { login_normal_admin }
should("NOT get index"){ get :index }
should("NOT get new"){ get :new }
end
context "just normal USER" do
setup { login_user }
should("NOT get index"){ get :index }
should("NOT get new"){ get :new }
end
end
이 훨씬 쉽게 관리 할 수 있습니다 :이 아이디어 당신에게
+0
하, 고마워, 나는 test-unit에있다. - 당신의 코드는 Rspec 용이다.) - 나는 shoulda-context를 사용하기로 결정했고 여분의 테스트를 받아 들인다. – stephenmurdoch
내 경험에 비추어 볼 때, 테스트는 항상 이렇게 "부풀어 오릅니다". 간단한 코드를 위해서조차도 검사해야 할 많은 수의 순열이 있습니다. – jkeuhlen