[RUBY] Que faire si vous obtenez une erreur avec l'authentification de base pendant le code de test Rails

introduction

Cette fois, je voudrais décrire l'erreur dans le titre qui est apparue lors de la mise en œuvre du code de test unitaire du contrôleur. Mais d'abord, je voudrais expliquer brièvement l'authentification de base.

Qu'est-ce que l'authentification de base?

L'un des moyens de restreindre l'accès aux sites Web. L'authentification de base est le moyen le plus simple d'appliquer des restrictions. L'authentification de base est l'une des fonctions fournies avec le serveur Web et vous pouvez facilement restreindre l'accès en écrivant simplement quelques lignes dans le fichier.

** "Image de référence pour l'authentification de base" ** Image from Gyazo

** "Sites que j'ai cités" ** Qu'est-ce que la certification de base? Explication de la méthode de réglage et des précautions / causes d'erreur

contenu de l'erreur

Maintenant, laissez-moi vous expliquer le sujet principal de cette époque. Tout d'abord, j'ai obtenu l'erreur </ font> suivante lors de l'exécution du code de test unitaire du contrôleur.

Terminal


bundle exec rspec spec/requests/items_spec.rb

~Omission~

Failures:

  1) ItemsController 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: 401
     
       (compared using ==)
     # ./spec/requests/items_spec.rb:28:in `block (3 levels) in <top (required)>'

  2) ItemsController GET /Lorsque vous demandez l'action d'indexation d'index, le nom du produit répertorié existe dans la réponse.
     Failure/Error: expect(response.body).to include @item.goods
     
       expected "HTTP Basic: Access denied.\n" to include "Custard Apples Daikon"
       Diff:
       @@ -1 +1 @@
       -Custard Apples Daikon
       +HTTP Basic: Access denied.
       
~Omission~

Vérification du contenu d'erreur

D'après le contenu ci-dessus, les deux points suivants sont considérés comme la cause de cette erreur </ font>.

Terminal


1)
       expected: 200
            got: 401

2)
expected "HTTP Basic: Access denied.\n" to include 

Le premier est attendu, qui devrait être ** "200" (succès) **, mais la réponse réelle était ** "401" (non authentifié) **.

Et comme le mot ** Basic ** apparaît dans le second, j'ai supposé qu'il était rejeté par la ** authentification de base ** que j'avais définie. (Eh bien, le contenu anglais ** (HTTP Basic: Accès refusé) ** signifie également simplement que l'accès a été refusé par HTTP Basic.)

À partir des deux contenus d'erreur ci-dessus, il a été jugé que le code de test a échoué car la partie d'authentification de base définie dans ** "application_controller.rb" ** n'a pas été transmise.

Par conséquent, j'ai décidé de commenter la partie d'authentification de base pertinente uniquement lors de l'exécution du code de test.

application_controller.rb


class ApplicationController < ActionController::Base
  before_action :basic_auth (Commentez cette ligne)

Et exécutez à nouveau le code de test unitaire

Terminal


 bundle exec rspec spec/requests/items_spec.rb

ItemsController
  GET /index
Lorsque je demande l'action d'indexation, la réponse est renvoyée normalement.
Lors de la demande de l'action d'indexation, le nom du produit répertorié existe 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 une liste des produits nouvellement publiés dans la réponse
  
Finished in 3.21 seconds (files took 4.76 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

Lorsque j'enquêtais, il semblait qu'il y avait un moyen de faire le code de test en quittant la partie d'authentification de base, mais cela semblait un peu compliqué, alors cette fois j'ai essayé cette méthode simple.

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

Recommended Posts