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.
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" **
** "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
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~
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)
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>
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.