Cancancanとは?
この記事を見て下さっているということは既にご存知だと思いますが、 権限管理のgem です。
Cancancanを使っているときのテストはどうしたらいいのか?
権限があるときは、権限を持つテストユーザーでログインして
test "test#indexにmanager権限を持つユーザーがアクセスして、正常レスポンスが返されること" do
# manager権限を持つユーザーでログイン
login(:yama_p)
get tests_path
assert_response :success
end
正常に処理ができることを確認すればまぁいいかも知れませんが、 アクセスできない(権限がない)ことを確認する にはどうしたらよいでしょうか?
というのも、上記で assert_response :errors
などとしてもcancancanで弾かれたときにエラーが返ってくるわけではなくそもそもアクセスできないので
CanCan::AccessDenied: You are not authorized to access this page.
とテストが落ちてしまいます。
権限を持つかどうかをテストする
Cancancanのwikiにテストについての記述があります。
test "test#indexにmember権限を持つユーザーはアクセス権限を持たないこと" do
# member権限を持つユーザー
user = users('fan_bingbing')
ability = Ability.new(user)
assert ability.cannot?(:manage, Test.new)
end
上記のような感じで、ユーザーが権限を持たないことをテストすればOK!