Wenn ich lade script/console
, möchte ich manchmal mit der Ausgabe eines Controllers oder einer View-Helper-Methode spielen.
Gibt es Möglichkeiten, um:
- Anfrage simulieren?
- Methoden von einer Controller-Instanz auf diese Anfrage aufrufen?
- Hilfsmethoden testen, entweder über die Controller-Instanz oder auf andere Weise?
app.get
(ein Thread-Fehler tritt auf). Gibt es eine Möglichkeit, das System zu spülen und mehr Gets auszuführen?url_for
von der Konsole aus anrufen . Um dies zu tun, tat ichapp.url_for(...)
NoMethodError: undefined method `protect_against_forgery?' for nil:NilClass
Definieren einer Funktion, dieprotect_against_forgery?
in der Konsole aufgerufen wird, die zurückgibtfalse
ActionDispatch::Integration::Session.include(Warden::Test::Helpers); Warden.test_mode! ; app.login_as(User.find(1), scope: :user)
.Eine einfache Möglichkeit, eine Controller-Aktion über ein Skript / eine Konsole aufzurufen und das Antwortobjekt anzuzeigen / zu bearbeiten, ist:
Das App-Objekt ist eine Instanz von ActionController :: Integration :: Session
Dies funktioniert bei Verwendung von Ruby on Rails 2.1 und 2.3, und ich habe frühere Versionen nicht ausprobiert.
quelle
Wenn Sie von der Konsole aus testen müssen (getestet auf Ruby on Rails 3.1 und 4.1):
Call Controller-Aktionen:
ApplicationController-Methoden:
Routenhelfer:
Helfer anzeigen:
Machen:
ActiveSupport-Methoden:
Lib-Module:
quelle
Hier ist eine Möglichkeit, dies über die Konsole zu tun:
Durch das Erstellen einer neuen Instanz von erhalten
ActionView::Base
Sie Zugriff auf die normalen Ansichtsmethoden, die Ihr Helfer wahrscheinlich verwendet. Durch das Erweitern werdenYourHelperModule
die Methoden in Ihr Objekt gemischt, sodass Sie deren Rückgabewerte anzeigen können.quelle
Wenn die Methode die Methode ist
POST
, dann:(Hier richten sich die Parameter nach Ihrer Anwendbarkeit.)
Sonst, wenn es die
GET
Methode ist, dann:quelle
app.methods.grep(/_path/)
:)controler/action
, hängt von Ihren Routen ab, zB könnte sein/users/all
und Karte zuApi::UsersController#index
:)rake routes
. En :)Eine andere Möglichkeit, dies zu tun, ist die Verwendung des Ruby on Rails-Debuggers. Unter http://guides.rubyonrails.org/debugging_rails_applications.html finden Sie eine Ruby on Rails-Anleitung zum Debuggen
Starten Sie den Server grundsätzlich mit der Option -u:
Fügen Sie dann einen Haltepunkt in Ihr Skript ein, an dem Sie Zugriff auf die Controller, Helfer usw. haben möchten.
Wenn Sie eine Anfrage stellen und diesen Teil im Code drücken, gibt die Serverkonsole eine Eingabeaufforderung zurück, in der Sie an einer Eingabeaufforderung Anforderungen stellen, Objekte anzeigen usw. können. Wenn Sie fertig sind, geben Sie einfach 'cont' ein, um die Ausführung fortzusetzen. Es gibt auch Optionen für erweitertes Debugging, aber dies sollte Ihnen zumindest den Einstieg erleichtern.
quelle
So erstellen Sie eine authentifizierte POST-Anfrage am Beispiel der Raffinerie:
Sie können diese auch nützlich finden, wenn Sie eine Fehlermeldung erhalten:
quelle
NameError: undefined local variable or method app for main:Object
ApplicationController.allow_forgery_protection = false
Sie können in der Ruby on Rails-Konsole wie folgt auf Ihre Methoden zugreifen:
quelle
Versuchen Sie in Ruby on Rails 3 Folgendes:
Der Body enthält den HTML-Code der URL.
Routen und Rendern (Versenden) eines Modells in Ruby on Rails 3
quelle
Die früheren Antworten rufen Helfer auf, aber die folgenden helfen beim Aufrufen von Controller-Methoden. Ich habe dies auf Ruby on Rails 2.3.2 verwendet.
Fügen Sie zuerst den folgenden Code zu Ihrer .irbrc-Datei hinzu (die sich in Ihrem Home-Verzeichnis befinden kann).
Dann können Sie in der Ruby on Rails-Konsole so etwas wie ...
... und der HTML-Code wird auf der Konsole gespeichert.
quelle
Innerhalb jeder Controller - Aktion oder Ansicht, können Sie die Konsole durch den Aufruf der aufrufen Konsole Methode.
Zum Beispiel in einer Steuerung:
Oder in einer Ansicht:
Dadurch wird eine Konsole in Ihrer Ansicht gerendert. Sie müssen sich nicht um den Ort des Konsolenanrufs kümmern. Es wird nicht an der Stelle seines Aufrufs gerendert, sondern neben Ihrem HTML-Inhalt.
Siehe: http://guides.rubyonrails.org/debugging_rails_applications.html
quelle
Für Controller können Sie ein Controller-Objekt in der Ruby on Rails-Konsole instanziieren.
Zum Beispiel,
quelle
def show response = @user.contributions end
Wie überschreibe ich die@user
Variable?Ein möglicher Ansatz für das Testen von Hilfsmethoden in der Ruby on Rails-Konsole ist:
Und zum Nachladen:
quelle
Wenn Sie einen eigenen Helfer hinzugefügt haben und dessen Methoden in der Konsole verfügbar sein sollen, gehen Sie wie folgt vor:
include YourHelperName
method_name(args)
in der Konsole aufgerufen.Beispiel: Angenommen, Sie haben MyHelper (mit einer Methode
my_method
) in 'app / helpers / my_helper.rb', dann in der Konsole:include MyHelper
my_helper.my_method
quelle