[RUBY] Was tun, wenn während des Rails-Testcodes ein Fehler bei der Standardauthentifizierung auftritt?

Einführung

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.

Was ist die Standardauthentifizierung?

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" ** Image from Gyazo

** "Websites, die ich zitiert habe" ** Was ist eine Basiszertifizierung? Erläuterung der Einstellungsmethode und Vorsichtsmaßnahmen / Fehlerursachen

Fehlerinhalt

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~

Überprüfung des Fehlerinhalts

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)

Führen Sie den Unit-Test-Code erneut 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>

abschließend

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.

Die Seite, auf die ich in diesem Artikel verwiesen habe

Recommended Posts