Dieses Mal möchte ich den Fehler im Titel beschreiben, der bei der Implementierung des Unit-Test-Codes der Steuerung aufgetreten ist. Zunächst möchte ich jedoch die grundlegende Authentifizierung kurz erläutern.
Eine Möglichkeit, den Zugriff auf Websites einzuschränken. Die Standardauthentifizierung ist der einfachste Weg, um Einschränkungen anzuwenden. Die Standardauthentifizierung ist eine der Funktionen, die mit dem Webserver geliefert werden. Sie können den Zugriff einfach einschränken, indem Sie nur ein paar Zeilen in die Datei schreiben.
** "Referenzbild für die Standardauthentifizierung" **
** "Websites, die ich zitiert habe" ** Was ist eine Basiszertifizierung? Erläuterung der Einstellungsmethode und Vorsichtsmaßnahmen / Fehlerursachen
Lassen Sie mich nun das Hauptthema dieser Zeit erklären. Zunächst wurde beim Ausführen des Unit-Test-Codes des Controllers der folgende Fehler </ font> angezeigt.
Terminal
bundle exec rspec spec/requests/items_spec.rb
~Unterlassung~
Failures:
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:28:in `block (3 levels) in <top (required)>'
2) ItemsController GET /Wenn Sie die Indexindexaktion anfordern, ist der aufgelistete Produktname in der Antwort vorhanden.
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.
~Unterlassung~
Aufgrund des obigen Inhalts werden die folgenden zwei Punkte als Ursache für diesen Fehler </ font> angesehen.
Terminal
1)
expected: 200
got: 401
2)
expected "HTTP Basic: Access denied.\n" to include
Die erste wird erwartet, die voraussichtlich ** "200" (Erfolg) ** sein wird, aber die tatsächliche Antwort war ** "401" (nicht authentifiziert) **.
Und da das Wort ** Basic ** im zweiten vorkommt, habe ich angenommen, dass es von der von mir festgelegten ** Basic-Authentifizierung ** abgelehnt wurde. (Nun, der englische Inhalt ** (HTTP Basic: Zugriff verweigert) ** bedeutet auch einfach, dass der Zugriff durch HTTP Basic verweigert wurde.)
Anhand der beiden oben genannten Fehlerinhalte wurde beurteilt, dass der Testcode fehlgeschlagen ist, weil der in ** "application_controller.rb" ** festgelegte grundlegende Authentifizierungsteil nicht übergeben wurde.
Aus diesem Grund habe ich beschlossen, den relevanten Standardauthentifizierungsteil nur bei der Ausführung des Testcodes auskommentieren zu lassen.
application_controller.rb
class ApplicationController < ActionController::Base
before_action :basic_auth (Kommentieren Sie diese Zeile aus)
Terminal
bundle exec rspec spec/requests/items_spec.rb
ItemsController
GET /index
Wenn ich die Indexaktion anfordere, wird die Antwort normal zurückgegeben.
Wenn Sie die Indexaktion anfordern, ist der aufgelistete Produktname in der Antwort vorhanden
Wenn Sie die Indexaktion anfordern, enthält die Antwort ein Bild des aufgelisteten Produkts
Wenn Sie die Indexaktion anfordern, ist der Verkaufspreis des aufgelisteten Artikels in der Antwort vorhanden
Wenn Sie die Indexaktion anfordern, enthält die Antwort eine Liste der neu veröffentlichten Produkte
Finished in 3.21 seconds (files took 4.76 seconds to load)
5 examples, 0 failures
Wie oben erwähnt, wurde der Testcode erfolgreich ausgeführt. </ font>
Als ich nachforschte, schien es eine Möglichkeit zu geben, den Testcode beim Verlassen des Basic-Authentifizierungsteils auszuführen, aber es schien ein bisschen kompliziert zu sein, also habe ich diesmal diese einfache Methode ausprobiert.
Recommended Posts