Lorsque je charge script/console
, parfois je veux jouer avec la sortie d'un contrôleur ou d'une méthode d'aide à la vue.
Existe-t-il des moyens de:
- simuler une demande?
- appeler des méthodes à partir d'une instance de contrôleur sur ladite demande?
- tester les méthodes d'aide, soit via ladite instance de contrôleur ou d'une autre manière?
app.get
(une erreur de thread s'ensuit). Existe-t-il un moyen de vider le système et d'exécuter plus de get?url_for
depuis la console. Pour ce faire, je l'ai faitapp.url_for(...)
NoMethodError: undefined method `protect_against_forgery?' for nil:NilClass
définir une fonction appeléeprotect_against_forgery?
dans la console qui retournefalse
ActionDispatch::Integration::Session.include(Warden::Test::Helpers); Warden.test_mode! ; app.login_as(User.find(1), scope: :user)
.Un moyen simple d'appeler une action de contrôleur à partir d'un script / d'une console et de visualiser / manipuler l'objet de réponse est le suivant:
L'objet app est une instance de ActionController :: Integration :: Session
Cela fonctionne pour moi en utilisant Ruby on Rails 2.1 et 2.3, et je n'ai pas essayé les versions antérieures.
la source
Si vous devez tester à partir de la console (testé sur Ruby on Rails 3.1 et 4.1):
Actions du contrôleur d'appel:
Méthodes ApplicationController:
Aides à l'itinéraire:
Afficher les assistants:
Rendre:
Méthodes ActiveSupport:
Modules Lib:
la source
Voici une façon de le faire via la console:
La création d'une nouvelle instance de
ActionView::Base
vous donne accès aux méthodes d'affichage normales que votre assistant utilise probablement. Ensuite, l'extensionYourHelperModule
mélange ses méthodes dans votre objet, vous permettant de visualiser leurs valeurs de retour.la source
Si la méthode est la
POST
méthode, alors:(Ici, les paramètres seront selon votre applicabilité.)
Sinon, si c'est la
GET
méthode, alors:la source
app.methods.grep(/_path/)
:)controler/action
, cela dépend de vos itinéraires, par exemple pourrait être/users/all
et mapper àApi::UsersController#index
:)rake routes
. :)Une autre façon de procéder consiste à utiliser le débogueur Ruby on Rails. Il existe un guide Ruby on Rails sur le débogage à http://guides.rubyonrails.org/debugging_rails_applications.html
Fondamentalement, démarrez le serveur avec l'option -u:
Et puis insérez un point d'arrêt dans votre script où vous souhaitez avoir accès aux contrôleurs, assistants, etc.
Et lorsque vous effectuez une demande et appuyez sur cette partie dans le code, la console du serveur renvoie une invite où vous pouvez ensuite effectuer des demandes, afficher des objets, etc. à partir d'une invite de commande. Une fois terminé, tapez simplement «cont» pour continuer l'exécution. Il existe également des options de débogage étendu, mais cela devrait au moins vous aider à démarrer.
la source
Voici comment effectuer une demande POST authentifiée, en utilisant la raffinerie comme exemple:
Vous pouvez également les trouver utiles si vous obtenez une erreur:
la source
NameError: undefined local variable or method app for main:Object
ApplicationController.allow_forgery_protection = false
Vous pouvez accéder à vos méthodes dans la console Ruby on Rails comme suit:
la source
Dans Ruby on Rails 3, essayez ceci:
Le corps contiendra le code HTML de l'URL.
Comment router et rendre (répartition) à partir d'un modèle dans Ruby on Rails 3
la source
Les réponses précédentes appellent des assistants, mais les suivantes vous aideront à appeler des méthodes de contrôleur. Je l'ai utilisé sur Ruby on Rails 2.3.2.
Ajoutez d'abord le code suivant à votre fichier .irbrc (qui peut être dans votre répertoire personnel)
Ensuite, dans la console Ruby on Rails, vous pouvez taper quelque chose comme ...
... et le HTML sera vidé sur la console.
la source
Dans toute action ou vue de contrôleur, vous pouvez appeler la console en appelant la méthode console .
Par exemple, dans un contrôleur:
Ou en vue:
Cela rendra une console dans votre vue. Vous n'avez pas besoin de vous soucier de l'emplacement de l'appel de console; il ne sera pas rendu sur place lors de son invocation mais à côté de votre contenu HTML.
Voir: http://guides.rubyonrails.org/debugging_rails_applications.html
la source
Pour les contrôleurs, vous pouvez instancier un objet contrôleur dans la console Ruby on Rails.
Par exemple,
la source
def show response = @user.contributions end
Comment remplacer la@user
variable?Une approche possible pour les tests de méthode d'assistance dans la console Ruby on Rails est la suivante:
Et pour recharger, faites:
la source
Si vous avez ajouté votre propre assistant et que vous souhaitez que ses méthodes soient disponibles dans la console, procédez comme suit:
include YourHelperName
method_name(args)
dans la console.Exemple: disons que vous avez MyHelper (avec une méthode
my_method
) dans 'app / helpers / my_helper.rb`, puis dans la console faites:include MyHelper
my_helper.my_method
la source