[RUBY] Was tun, wenn im Testcode der Steuereinheit in Rails der Fehler "302" angezeigt wird?

Einführung

Es ist keine Fortsetzung des vorherigen Artikels, hat aber einen ähnlichen Inhalt. Außerdem ist es nur ** 1 Beispiel ** im Fehler "302", also danke.

Fehlerinhalt

Dann trat zunächst der folgende Fehler </ font> auf, als der Unit-Test-Code der Steuerung implementiert wurde. Schauen Sie bitte

Terminal



 % bundle exec rspec spec/requests/orders_spec.rb

OrdersController
  GET /index
Wenn ich die Indexaktion anfordere, wird die Antwort normal zurückgegeben.(FAILED - 1)
Wenn Sie die Indexaktion anfordern, enthält die Antwort eine Beschreibung des aufgelisteten Elements(FAILED - 2)


Failures:

  1) OrdersController GET /Wenn Sie die Indexindexaktion anfordern, wird die Antwort normal zurückgegeben.
     Failure/Error: expect(response.status).to eq 200
     
       expected: 200
            got: 302
     
       (compared using ==)
     # ./spec/requests/orders_spec.rb:24:in `block (3 levels) in <top (required)>'

  2) OrdersController GET /Wenn Sie die Indexindexaktion anfordern, enthält die Antwort eine Beschreibung des aufgelisteten Elements.
     Failure/Error: expect(response.body).to include @item.details
       expected "<html><body>You are being <a href=\"http://www.example.com/users/sign_in\">redirected</a>.</body></html>" to include "Produktbeschreibung"
     # ./spec/requests/orders_spec.rb:29:in `block (3 levels) in <top (required)>'

~ Ausgelassen ~

Überprüfung des Fehlerinhalts

Jetzt möchte ich den Inhalt des Fehlers überprüfen. Es gibt zwei </ font> Teile, die diesen Fehler verursachen. Zunächst ist first </ font> der folgende Teil.

Terminal



  1)   Failure/Error: expect(response.status).to eq 200
     
       expected: 200
            got: 302

Als nächstes ist zweite </ font> der folgende Teil.

Terminal


  2)   Failure/Error: expect(response.body).to include @item.details

        expected "<html><body>You are being <a href=\"http://www.example.com/users/sign_in\">redirected</a>.</body></html>" to include "Produktbeschreibung"

Überprüfung des Fehlerinhalts

Lassen Sie uns nun den Inhalt des Fehlers überprüfen.

  • Zuerst wird erster Fehler </ font> erwartet und erwartet ** "200" (Erfolg) **, aber die tatsächliche Antwort ist ** "302" Es ist gefunden) **. Hier ist eine detaillierte Erklärung von ** "302" (gefunden) **.

Was ist ein 302 (gefunden) Fehler?

** "Der Antwortcode für den gefundenen Redirect-Status des HyperText Transfer Protocol (HTTP) 302 zeigt an, dass die angeforderte Ressource vorübergehend an die durch Location angegebene URL verschoben wurde, obwohl der Browser auf diese Seite umleitet. , Die Suchmaschine aktualisiert den Link zur Ressource nicht. "**

Um das Obige kurz zu erklären, lautet der Inhalt "Sie wurden auf eine andere Seite anstatt auf die Seite umgeleitet, auf die Sie ursprünglich wechseln wollten."

** (Referenzseite zitiert) ** Referenzseite für den HTTP-Antwortstatuscode


  • Als nächstes folgt der zweite Fehler </ font>, aber der Punkt, auf den ich mich konzentriert habe, ist der folgende Teil.

<a href=\"http://www.example.com/users/sign_in\">redirected</a>.

Zunächst gibt es ** "users / sign_in" **, sodass geschlossen werden kann, dass der ** Anmeldebildschirm ** betroffen ist. Und dann gibt es ** "umgeleitet" **, so dass Sie vermuten können, dass es auch hier ** umgeleitet ** wurde.

Aus den obigen Überprüfungsinhalten kann abgeleitet werden, dass ** "Wird es durch Umleitung zum Anmeldebildschirm übersprungen?" **.

Wenn es dann um den Teil geht, in dem eine solche Verarbeitung durchgeführt wird, stellt sich heraus, dass der Teil ** "authenticate_user!" ** entspricht. Hier ist ein kleiner ** "authenticate_user!" **.

Was ist authenticate_user!

Wenn der Benutzer bei der Ausführung des Prozesses nicht angemeldet ist, wechselt der Benutzer zum Anmeldebildschirm. Es ist eine Methode für die Entwicklung, die die Verarbeitung durchführt.

Aus den oben genannten Gründen habe ich beschlossen, den relevanten ** "authenticate_user!" ** bei der Ausführung des Testcodes zu kommentieren.

orders_controller.rb


class OrdersController < ApplicationController
  before_action :authenticate_user!(Kommentiere diese Zeile aus)

Führen Sie den Unit-Test-Code erneut aus

Terminal


% bundle exec rspec spec/requests/orders_spec.rb

OrdersController
  GET /index
Wenn ich die Indexaktion anfordere, wird die Antwort normal zurückgegeben.
Wenn Sie die Indexaktion anfordern, enthält die Antwort eine Beschreibung des aufgelisteten Elements
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, gibt es einen Wortlaut, um den Kaufinhalt in der Antwort zu bestätigen

Finished in 5.79 seconds (files took 10.02 seconds to load)
5 examples, 0 failures

Wie oben erwähnt, wurde der Testcode erfolgreich ausgeführt. </ font>

abschließend

Dieser ** Fehler (302) ** war ein Fehler, der auftrat, weil ** beim Ausführen des Testcodes des Controllers ** mit ** "authenticate_user!" ** zum Anmeldebildschirm umgeleitet wurde. Das Anmelden mit dem Integrationstestcode ist einfach, aber ich war mir nicht sicher, ob ich mich mit dem Unit-Testcode des Controllers anmelden konnte, also habe ich mich diesmal damit befasst, indem ich dies auskommentierte.

Die Seite, auf die ich in diesem Artikel verwiesen habe

Referenzseite für den HTTP-Antwortstatuscode

Recommended Posts