[RAILS] Correspondant à "erreur que l'authentification de base ne réussit pas" dans le code de test "L'histoire qui n'a pas pu être faite"

Situation au moment de l'erreur

Depuis que j'ai implémenté une application de copie d'un certain site frima, j'écrivais un code de test unitaire du contrôleur comme une pratique, mais l'erreur suivante s'est produite sur le terminal au moment de l'exécution.

Terminal


bundle exec rspec spec/requests/items_spec.rb

~Omission~

 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:20:in `block (3 levels) in <top (required)>'

~Omission~
Environnement de développement

Ruby 2.6.5 Rails 6.0.3.3 MySQL Visual Studio Code (Caprybara,Rspec,GoogleChrome)

Prise en compte / vérification

Un modèle d'erreur indiquant que l'état HTTP est 401 (non accessible) lors de l'accès à root_path. Cette application a introduit ** l'authentification de base **, et je m'attendais à ce qu'elle soit liée.

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

Il s'agit d'un mécanisme d'authentification des utilisateurs fourni dans la norme de communication HTTP, et c'est l'une des méthodes simples qui peuvent restreindre l'accès aux sites Web. Des utilisateurs et des mots de passe prédéfinis pouvant communiquer avec le serveur afin que seuls les utilisateurs qui les correspondent puissent utiliser l'application Web.

【Exemple d'image】 スクリーンショット 2020-10-24 19.44.28.png Lorsque j'ai vérifié avec la déclaration d'erreur ci-dessus et l'authentification de base, il y a eu des cas où l'authentification de base n'a pas réussi pendant le test. Sur la base de l'article de référence (posté à la fin de l'article), j'ai essayé de réussir à passer le nom d'utilisateur et le mot de passe d'authentification de base à la demande lors du test.

résultat

Se battre avec un mentor pendant environ 2 heures ... J'ai essayé différentes méthodes basées sur l'article de référence, mais l'erreur n'a pas été résolue. ~~ Et quand le mentor a enquêté ... ** "À partir de 2020, la certification de base pendant les tests n'est pas recommandée" **. ~~

Quel bordel ...!

* ~ Si vous ne pouvez pas, ne le faites pas ~ *

La politique de résolution des erreurs consiste à "passer l'authentification de base au moment du test" Changé en "Ne pas effectuer d'authentification de base sauf dans l'environnement de production (pendant les tests)".

application_controller.rb


class ApplicationController < ActionController::Base
  before_action :basic_auth if Rails.env.production? #Branche pour ne pas effectuer d'authentification de base lors des tests

  private
  def basic_auth
    authenticate_or_request_with_http_basic do |username, password|
      username == 'username' && password == 'password'
    end
  end
end

J'ai ajouté ** if Rails.env.production? ** à before_action afin qu'il ne s'applique que dans l'environnement de production. Grâce à cela, vous pouvez désormais accéder à la première page et exécuter le test sans authentification de base pendant le test!

Impressions

Comme je suis encore un débutant, lorsque je suis confronté à une erreur, j'ai tendance à essayer de résoudre le problème de front. Comme cette fois, je me suis rendu compte qu'il est important de penser sous différents angles s'il existe un moyen d'éviter les erreurs et de "ne pas avoir à le faire" **.

Cet article était le premier message. J'espère que cela vous aidera. Merci d'avoir parcouru jusqu'au bout.

Article de référence

Qu'est-ce que la certification de base? Méthode de réglage et précautions - Explication de la cause de l'erreur [Stumbled on Rails x Authentification de base x Rspec](https://doruby.jp/users/hello_rails/entries/Rails%C3%97Basic%E8%AA%8D%E8%A8%BC%C3%97Rspec%E3 % 81% A7% E3% 81% A4% E3% 81% BE% E3% 81% A5% E3% 81% 84% E3% 81% 9F) Test des actions avec l'authentification BASIC dans RSpec3 Test Pass Rails / Rspec avec authentification de base http Comment écrire du code de test avec la certification de base

Historique des corrections

2020/10/25 Veuillez signaler et apporter les corrections suivantes.

――Comme pour la non-recommandation, je n'ai entendu que verbalement et la source est incertaine, j'ai donc ajouté une ligne d'annulation. (J'espère que vous pouvez y penser comme "il y a une telle rumeur".)

Merci, @jnchito.

Recommended Posts

Correspondant à "erreur que l'authentification de base ne réussit pas" dans le code de test "L'histoire qui n'a pas pu être faite"
L'histoire de l'arrêt parce que le test des rails n'a pas pu être fait
L'histoire selon laquelle le servlet n'a pas pu être chargé dans l'application Web Java
L'histoire selon laquelle la mise à jour forcée n'a pas pu être mise en œuvre
Le cas où @Autowired n'a pas pu être utilisé dans JUnit5
Que faire si vous obtenez une erreur avec l'authentification de base pendant le code de test Rails
Le cas où "apt-get update" défini dans "Dockerfile" n'a pas pu être exécuté au moment de "docker-compose build"
À propos du cas où ("b" .. "aa") ne pourrait pas être utilisé dans Ruby Range
[Erreur] Comment résoudre le phénomène selon lequel l'écran ne passe pas après l'édition
Le code écrit en Java-TeraPad à partir du débutant ne fonctionne pas en raison d'une erreur
Comment écrire du code de test avec la certification de base
L'histoire selon laquelle la méthode d'initialisation de variable appelée par le constructeur Java ne doit pas être remplacée
PATH ne passe pas ... La cause est le code du caractère
L'histoire qui a conduit à résoudre l'erreur car postgres n'a pas commencé avec docker-compose up
L'histoire selon laquelle le paramètre de requête de l'application iPhone n'a pas pu être obtenu avec le servlet
Introduction à Rakefile qui peut être effectuée en 10 minutes environ
Nouvelles fonctionnalités de Java 14 pouvant être utilisées pour écrire du code
[Docker] Une histoire sur une erreur dans la composition de docker
Une collection de modèles dont vous voulez être conscient pour ne pas compliquer le code
[Rails] Une histoire qui a continué à vérifier incorrectement la raison pour laquelle l'action de mise à jour n'a pas réussi (mise à jour)
Comment résoudre le problème qu'Aptana Studio ne démarre pas
[Gradle] L'histoire selon laquelle le fichier de classe n'existait pas dans le fichier jar
Résumé des problèmes auxquels je n'ai pas pu me connecter à Firebase
Notez que Spring Data JDBC n'a pas pu insérer
L'histoire que Tomcat a souffert d'une erreur de timeout dans Eclipse
L'histoire selon laquelle l'erreur de construction ne s'est pas arrêtée lors de l'utilisation d'Eclipse 2020
Solution Pay.JP lorsqu'elle fonctionne localement mais ne fonctionne pas bien en environnement de production
Une histoire que même un homme qui ne comprend pas le langage C pourrait ajouter de nouvelles fonctions à Ruby 2.6
Passer les paramètres régionaux i18n à JavaScript
Comment interagir avec un serveur qui ne plante pas l'application
[Rails] À propos de l'erreur selon laquelle l'image n'est pas affichée dans l'environnement de production
JSESSIONID n'a pas pu être attribué à l'URL lors de l'utilisation de Spring Security