2016-11-19 1 views
0

J'utilise Rails 5 API, Pundit et tout va bien. J'essaie de tester ce cas spécifique où si vous n'êtes pas le propriétaire de la ressource, vous ne devriez pas pouvoir voir les informations de cet utilisateur.Rails Pundit mini test assert_response Pundit :: NotAuthorizedError

J'ai donc reçu quelques exemples de données d'appareils, Sarah et Jim sont deux exemples.

Je suis arrivé ce cas test ici:

test "user show - cannot show other user's info" do 
    get user_path(@sarah), headers: user_authenticated_header(@jim) 
    assert_raises(Pundit::NotAuthorizedError) 
end 

j'ai couru mon test, tous les autres passent, sauf celui qui dit:

Error: 
UsersControllerTest#test_user_show_-_cannot_show_other_user's_info: 
Pundit::NotAuthorizedError: not allowed to show? 

Suis-je écrire correctement l'exception assert_raise? Pourquoi mon test ne passe-t-il pas? Il semble qu'une fois l'erreur levée, la ligne suivante de mon test n'est plus exécutée.

Répondre

1

Je déteste quand je continue à répondre à mes questions ... loin :(

Après plus la recherche, il se trouve qu'il est comme ça:

test "user show - cannot show other user's info" do 
    assert_raises(Pundit::NotAuthorizedError) { 
    get user_path(@sarah), headers: user_authenticated_header(@jim) 
    } 
end 

Je trouve la réponse après avoir trouvé cette :

http://apidock.com/ruby/Test/Unit/Assertions/assert_raise

assert_raises prend un type d'erreur, dans mon cas Pundit::NotAuthorizedError et un bloc de code pour affirmer l'erreur sera rai sed pour.

En d'autres termes:

assert_raises(ExceptionType) { 
    // my code to execute that will cause the error to happen 
} 

Mes autres recherches tourne habituellement la syntaxe de test RSpec. Laissant cette réponse ici pour les futurs développeurs Rails en utilisant Mini Test comme moi: D