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~
Ruby 2.6.5 Rails 6.0.3.3 MySQL Visual Studio Code (Caprybara,Rspec,GoogleChrome)
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.
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】 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.
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 ...!
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!
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.
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
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