[RUBY] [RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]

Beginnend mit Rails 5 sind Zuweisungen (auch assert_template) veraltet. Derzeit ist der Controller-Test selbst nicht veraltet, sodass Zuweisungen verwendet werden können. Sie müssen jedoch ein Juwel namens Rails-Controller-Test installieren.

Dies ist jedoch nur eine Abhilfe für bestehende Projekte und es wird nicht empfohlen, Zuweisungen in neuen Projekten zu verwenden. (Ich weiß nicht, warum es so verrückt ist. Bitte lass es mich wissen, wenn du weißt: bete :)

stattdessen,

controller.instance_variable_get("@hoge")

Sie können die Instanzvariable mit abrufen.

Codebeispiel

Ich habe einen Teil des Tests des Passwort-Reset-Prozesses extrahiert, den ich kürzlich geschrieben habe.

password_resets_request_spec.rb


RSpec.describe 'PasswordResets', type: :request do
  let(:user) { create(:user) }

 describe 'Zugriff auf den Bearbeitungsbildschirm zum Zurücksetzen des Passworts' do
    context 'Wenn die E-Mail-Adresse falsch ist' do
      it 'Der Benutzer sollte zur Seite zum Zurücksetzen des Kennworts weitergeleitet werden' do
        post password_resets_path, params: { password_reset: { email: user.email } }
        user = controller.instance_variable_get('@user')
        get edit_password_reset_path(user.reset_token, email: '')
        expect(flash[:danger]).to be_truthy
        follow_redirect!
        expect(request.fullpath).to eq '/password_resets/new'
      end
    end

Im obigen Code wollte ich auf das Attribut reset_token zugreifen, sodass ich das Gefühl habe, eine Instanzvariable namens @user für die Aktion create zu erhalten.

Vielen Dank für das Lesen bis zum Ende!

Es ist etwas kurz, in letzter Zeit persönlich entwickelte Apps bereitzustellen. Beten Sie: Sobald die Bereitstellung abgeschlossen ist, schreibe ich wieder einen soliden Artikel! !! Vielen Dank.

Recommended Posts

[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
Wenn Sie die Methode außerhalb verwenden möchten
Möglicherweise möchten Sie die Methode remove in ArrayList nicht sehr oft verwenden
Delicate ist praktisch, wenn Sie Teile wiederverwenden möchten
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Wenn Sie shutdownNow nicht aufrufen, wenn die Übertragung mit dem Java SDK von AWS S3 abgeschlossen ist, bleibt der Thread weiterhin bestehen.
Wenn Sie InputStream in JDBI3 binden möchten
[Swift] Verwenden Sie nonzeroBitCount, wenn Sie in Swift popcnt möchten
Festlegen, wann in junit "Der Konstruktor Empty () ist nicht sichtbar" auftritt
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
Wenn das Projekt nicht in Eclipse angezeigt wird
Was ist zu tun, wenn in einer der Quellen in der Entwicklungsumgebung mit Docker × Rails × RSpec "Nicht gefunden" angezeigt wird?
Beim Ändern des Controllers von Spring Web MVC in kotlin, @Autowired Die angegebene Komponente wird nicht injiziert und wird null
Ich möchte, dass Sie die Geschichte erzählen, dass der Fehler behoben wurde, als Sie das Ladegerät in die Ecke Ihres Kopfes gestochen haben
[Rails] After-Option nützlich, wenn Sie die Reihenfolge der DB-Spalten ändern möchten
Für diejenigen, die MySQL für die Datenbank in der Umgebungskonstruktion von Rails6 ~ verwenden möchten.
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
Verwenden Sie keinen Befehl, wenn Sie die CMD des Docker-Images von Pod im Manifest von k8s neu schreiben
Wenn Sie die Hauptzweiginformationen in dem aktuellen Zweig wiedergeben möchten, an dem Sie gerade arbeiten
Die Idee, abzuschalten, wenn der Fehler nicht behoben ist
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
Eine Sammlung von Mustern, die Sie kennen möchten, um den Code nicht zu komplizieren
Vergleich von Versionszeichenfolgen, wenn Sie die Verarbeitung zwischen zwei Versionen verzweigen möchten (Java-Implementierung)
Ein Memorandum, wenn Sie die von Jena & SPARQL erfassten Daten für jede Variable anzeigen möchten.
Wie schreibe ich, wenn ich mit "C language string array" wie argv [] in Ruby-FFI umgehen möchte?
Wenn Sie Ihre Container nur in der Cloud ausführen möchten, ist Azure Container Instances ganz einfach
Ich möchte den Rahmen des Textfelds rot machen, wenn ein Eingabefehler auftritt
So beheben Sie das Problem, dass beim Stoppen der Webanwendung kein Protokollierungsprotokoll ausgegeben wird
Ist es für den Benutzer einfach, Allzweckfunktionen zu implementieren? Seien wir uns dessen bewusst
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde
[Rails / Routing] So verweisen Sie auf den Controller in Ihrem eigenen Verzeichnis
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Wenn Sie die übergeordnete Klasse in Lomboks @builder aufnehmen möchten
Möchten Sie wissen, was Ruby n die Potenz von 2 ist? (Machturteil von 2)
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Ich möchte den Wert von Attribute in Selenium of Ruby ändern