[RUBY] Que faire si vous obtenez une erreur «302» dans le code de test du contrôleur dans Rails

introduction

Ce n'est pas une continuation de l'article précédent, mais il a un contenu similaire. De plus, ce n'est que ** 1 exemple ** dans l'erreur "302", donc merci.

contenu de l'erreur

Ensuite, tout d'abord, l'erreur </ font> suivante est apparue lors de l'implémentation du code de test unitaire du contrôleur. Regarde s'il te plait

Terminal



 % bundle exec rspec spec/requests/orders_spec.rb

OrdersController
  GET /index
Lorsque je demande l'action d'indexation, la réponse est renvoyée normalement.(FAILED - 1)
Lorsque vous demandez l'action d'indexation, il y a une description de l'élément répertorié dans la réponse(FAILED - 2)


Failures:

  1) OrdersController GET /Lorsque vous demandez l'action d'indexation d'index, la réponse est renvoyée normalement.
     Failure/Error: expect(response.status).to eq 200
     
       expected: 200
            got: 302
     
       (compared using ==)
     # ./spec/requests/orders_spec.rb:24:in `block (3 levels) in <top (required)>'

  2) OrdersController GET /Lorsque vous demandez l'action d'indexation d'index, il y a une description de l'élément répertorié dans la réponse.
     Failure/Error: expect(response.body).to include @item.details
       expected "<html><body>You are being <a href=\"http://www.example.com/users/sign_in\">redirected</a>.</body></html>" to include "Description du produit"
     # ./spec/requests/orders_spec.rb:29:in `block (3 levels) in <top (required)>'

~ Omis ~

Vérification du contenu d'erreur

Maintenant, je voudrais vérifier le contenu de l'erreur. Il y a deux </ font> parties qui provoquent cette erreur. Tout d'abord, first </ font> est la partie suivante.

Terminal



  1)   Failure/Error: expect(response.status).to eq 200
     
       expected: 200
            got: 302

Ensuite, second </ font> est la partie suivante.

Terminal


  2)   Failure/Error: expect(response.body).to include @item.details

        expected "<html><body>You are being <a href=\"http://www.example.com/users/sign_in\">redirected</a>.</body></html>" to include "Description du produit"

Vérification du contenu d'erreur

Vérifions maintenant le contenu de l'erreur.

  • Premièrement, première erreur </ font> est attendue et attend ** "200" (succès) **, mais la réponse réelle est ** "302" Il est trouvé) **. Voici une explication détaillée de ** "302" (trouvé) **.

Qu'est-ce qu'une erreur 302 (trouvée)?

** "Le code de réponse de l'état de redirection trouvé par HyperText Transfer Protocol (HTTP) 302 indique que la ressource demandée a été temporairement déplacée vers l'URL indiquée par Emplacement, bien que le navigateur redirige vers cette page. , Le moteur de recherche ne met pas à jour le lien vers la ressource. "**

Pour expliquer brièvement ce qui précède, le contenu est "Vous avez été redirigé vers une autre page au lieu de la page vers laquelle vous vouliez initialement effectuer la transition".

** (Site de référence cité) ** Site de référence pour le code d'état de la réponse HTTP


  • Ensuite, voici deuxième erreur </ font>, mais les points sur lesquels je me suis concentré sont les parties suivantes.

<a href=\"http://www.example.com/users/sign_in\">redirected</a>.

Tout d'abord, il y a ** "users / sign_in" , donc on peut en déduire que l ' écran de connexion ** est impliqué. Et puis il y a ** "redirigé" **, donc vous pouvez deviner qu'il a été ** redirigé ** ici aussi.

En déduisant du contenu de vérification ci-dessus, on peut supposer que ** "Est-il passé à l'écran de connexion par redirection?" **.

Ensuite, quand il s'agit de la partie où un tel traitement est effectué, il s'avère que la partie ** "authenticate_user!" ** correspond. Voici un petit ** "authenticate_user!" **.

Qu'est-ce que authenticate_user!

Si l'utilisateur n'est pas connecté lorsque le processus est exécuté, l'utilisateur passe à l'écran de connexion. C'est une méthode de conception qui effectue le traitement.

À partir des points ci-dessus, j'ai décidé de commenter le ** "authenticate_user!" ** pertinent lors de l'exécution du code de test.

orders_controller.rb


class OrdersController < ApplicationController
  before_action :authenticate_user!(Commentez cette ligne)

Exécutez à nouveau le code de test unitaire

Terminal


% bundle exec rspec spec/requests/orders_spec.rb

OrdersController
  GET /index
Lorsque je demande l'action d'indexation, la réponse est renvoyée normalement.
Lorsque vous demandez l'action d'indexation, il y a une description de l'élément répertorié dans la réponse
Lorsque vous demandez l'action d'indexation, une image du produit répertorié apparaît dans la réponse
Lorsque vous demandez l'action d'indexation, le prix de vente de l'article répertorié existe dans la réponse
Lorsque vous demandez l'action d'indexation, il y a un libellé pour confirmer le contenu de l'achat dans la réponse

Finished in 5.79 seconds (files took 10.02 seconds to load)
5 examples, 0 failures

Comme mentionné ci-dessus, le code de test a été exécuté avec succès. </ font>

en conclusion

Cette ** erreur (302) ** était une erreur survenue parce que ** redirigé ** vers l'écran de connexion avec ** "authenticate_user!" ** lors de l'exécution du code de test du contrôleur. Le processus de connexion avec le code de test d'intégration est facile, mais je n'étais pas sûr de pouvoir me connecter avec le code de test unitaire du contrôleur, alors je l'ai traité en commentant cette fois.

Le site auquel j'ai fait référence dans cet article

Site de référence pour le code d'état de la réponse HTTP

Recommended Posts