[RAILS] Entspricht "Fehler, dass die Basisauthentifizierung nicht bestanden wird" im Testcode "Die Geschichte, die nicht gemacht werden konnte".

Situation zum Zeitpunkt des Fehlers

Da ich eine Kopieranwendung einer bestimmten Frima-Site implementiert habe, habe ich in der Praxis einen Unit-Test-Code des Controllers geschrieben, aber der folgende Fehler ist zum Zeitpunkt der Ausführung auf dem Terminal aufgetreten.

Terminal


bundle exec rspec spec/requests/items_spec.rb

~Unterlassung~

 1) ItemsController GET #Wenn Sie die Indexindexaktion anfordern, wird die Antwort normal zurückgegeben.
     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)>'

~Unterlassung~
Entwicklungsumgebung

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

Berücksichtigung / Überprüfung

Ein Fehlermuster, bei dem der HTTP-Status beim Zugriff auf root_path 401 (nicht verfügbar) lautet. Diese Anwendung hat ** grundlegende Authentifizierung ** eingeführt, und ich habe erwartet, dass es verwandt sein könnte.

Was ist eine Basisauthentifizierung?

Dies ist ein Benutzerauthentifizierungsmechanismus, der im HTTP-Kommunikationsstandard bereitgestellt wird, und eine der einfachen Methoden, mit denen der Zugriff auf Websites eingeschränkt werden kann. Voreingestellte Benutzer und Kennwörter, die mit dem Server kommunizieren können, sodass nur die Benutzer, die mit ihnen übereinstimmen, die Webanwendung verwenden können.

【Beispielbild】 スクリーンショット 2020-10-24 19.44.28.png Als ich mit der obigen Fehleranweisung und der Basisauthentifizierung nachgesehen habe, gab es Fälle, in denen die Basisauthentifizierung während des Tests nicht bestanden wurde. Basierend auf dem Referenzartikel (am Ende des Artikels veröffentlicht) habe ich versucht, den Benutzernamen und das Kennwort für die Basisauthentifizierung während des Tests an die Anforderung zu übergeben.

Ergebnis

Kampf mit einem Mentor für ca. 2 Stunden ... Ich habe verschiedene Methoden basierend auf dem Referenzartikel ausprobiert, aber der Fehler wurde nicht behoben. ~~ Und als der Mentor nachforschte ... ** "Ab 2020 wird eine Grundzertifizierung während der Prüfung nicht empfohlen" **. ~~

Was für ein Chaos ...!

* ~ Wenn du nicht kannst, tu es nicht ~ *

Die Richtlinie zur Fehlerbehebung basiert auf "Bestehen der Basisauthentifizierung zum Zeitpunkt des Tests". Geändert zu "Führen Sie keine Basisauthentifizierung durch, außer in der Produktionsumgebung (während des Tests)".

application_controller.rb


class ApplicationController < ActionController::Base
  before_action :basic_auth if Rails.env.production? #Verzweigen Sie, um während des Tests keine grundlegende Authentifizierung durchzuführen

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

Ich habe ** if Rails.env.production? ** zu before_action hinzugefügt, damit es nur in der Produktionsumgebung gilt. Dank dessen können Sie jetzt auf die oberste Seite zugreifen und den Test ohne grundlegende Authentifizierung während des Tests ausführen!

Impressionen

Da ich noch ein Anfänger bin, neige ich dazu, das Problem direkt zu lösen, wenn ich auf einen Fehler stoße. Mir wurde klar, dass es wichtig ist, aus verschiedenen Perspektiven wie diesmal zu überlegen, ob es einen Weg gibt, Fehler zu vermeiden und "es nicht tun zu müssen".

Dieser Artikel war der erste Beitrag. Ich hoffe, Sie finden es hilfreich. Vielen Dank für das Durchsuchen bis zum Ende.

Referenzartikel

Was ist eine Basiszertifizierung? Erläuterung der Einstellungsmethode und Vorsichtsmaßnahmen / Fehlerursachen [Auf Schienen gestolpert x Standardauthentifizierung 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) Testen von Aktionen mit BASIC-Authentifizierung in RSpec3 Rails / Rspec-Test mit http-Basisauthentifizierung bestehen Schreiben von Testcode mit Basiszertifizierung

Korrekturgeschichte

2020/10/25 Bitte weisen Sie darauf hin und nehmen Sie die folgenden Korrekturen vor.

―― Was die Nichtempfehlung betrifft, habe ich sie nur mündlich gehört und die Quelle ist unsicher, daher habe ich eine Stornierungszeile hinzugefügt. (Ich hoffe, Sie können sich das als "es gibt so ein Gerücht" vorstellen.)

Vielen Dank, @jnchito.

Recommended Posts

Entspricht "Fehler, dass die Basisauthentifizierung nicht bestanden wird" im Testcode "Die Geschichte, die nicht gemacht werden konnte".
Die Geschichte des Anhaltens, weil der Schienentest nicht durchgeführt werden konnte
Die Geschichte, dass das Servlet nicht in die Java-Webanwendung geladen werden konnte
Die Geschichte, dass das erzwungene Update nicht implementiert werden konnte
Der Fall, dass @Autowired in JUnit5 nicht verwendet werden konnte
Was tun, wenn während des Rails-Testcodes ein Fehler bei der Standardauthentifizierung auftritt?
Der Fall, in dem das in der "Docker-Datei" definierte "apt-get update" während des "Docker-Compose-Builds" nicht ausgeführt werden konnte.
Über den Fall, dass ("b" .. "aa") nicht in Ruby Range verwendet werden konnte
[Fehler] So beheben Sie das Phänomen, dass der Bildschirm nach der Bearbeitung nicht wechselt
In Java-TeraPad ab Anfänger geschriebener Code funktioniert aufgrund eines Fehlers nicht
So schreiben Sie Testcode mit Basic-Zertifizierung
Das Problem, dass der Test nicht über die Befehlszeile mit Spring-Boot-Starter-Test ausgeführt werden konnte, wurde behoben
Die Geschichte, dass die vom Java-Konstruktor aufgerufene Methode zur Variableninitialisierung nicht überschrieben werden sollte
PATH geht nicht vorbei ... Die Ursache ist der Zeichencode
Die Geschichte, die zur Lösung des Fehlers führte, weil postgres nicht mit Docker-Compose begann
Die Geschichte, dass der Anforderungsparameter aus der iPhone-Anwendung mit dem Servlet nicht erfolgreich abgerufen werden konnte
Einführung in Rakefile, die in ca. 10 Minuten durchgeführt werden kann
Java 14 neue Funktionen, mit denen Code geschrieben werden kann
[Docker] Eine Geschichte über einen Fehler beim Erstellen von Docker
Eine Sammlung von Mustern, die Sie kennen möchten, um den Code nicht zu komplizieren
[Rails] Eine Geschichte, die weiterhin fälschlicherweise den Grund überprüfte, warum die Aktualisierungsaktion nicht bestanden wurde (Aktualisierung)
So lösen Sie das Problem, dass Aptana Studio nicht gestartet wird
[Gradle] Die Geschichte, dass die Klassendatei nicht in der JAR-Datei vorhanden war
Zusammenfassung der Probleme, bei denen ich mich nicht bei firebase anmelden konnte
Ein Memo über den Fall, dass das Einfügen mit Spring Data JDBC nicht durchgeführt werden konnte
Die Geschichte, dass Tomcat in Eclipse unter einem Timeout-Fehler litt
Die Geschichte, dass der Erstellungsfehler bei Verwendung von Eclipse 2020 nicht aufgehört hat
Pay.JP-Lösung, wenn sie lokal funktioniert, aber in der Produktionsumgebung nicht gut funktioniert
Eine Geschichte, die selbst ein Mann, der die C-Sprache nicht versteht, Ruby 2.6 um neue Funktionen erweitern könnte
Übergeben Sie das Gebietsschema i18n an JavaScript
So interagieren Sie mit einem Server, der die App nicht zum Absturz bringt
[Schienen] Über den Fehler, dass das Bild nicht in der Produktionsumgebung angezeigt wird
JSESSIONID konnte bei Verwendung von Spring Security nicht der URL zugewiesen werden