2010-03-24 5 views
1

Je dois manquer quelque chose de très simple, mais je ne trouve pas la réponse à cette question. J'ai une méthode nommée foo à l'intérieur bar_controller. Je veux simplement appeler cette méthode à l'intérieur d'un test fonctionnel.Comment obtenir un handle/une référence à l'objet contrôleur courant dans un test fonctionnel de rails?

Voici mon contrôleur:

class BarsController < ApplicationController 
    def foo 
    # does stuff 
    end 
end 

Voici mon test fonctionnel:

class BarsControllerTest << ActionController::TestCase 
    def "test foo" do 
    # run foo 
    foo 
    # assert stuff 
    end 
end 

Quand je lance le test que je reçois:

NameError: undefined local variable or method `foo' for #<BarsControllerTest:0x102f2eab0> 

Toute la documentation sur les tests fonctionnels décrivent comment pour simuler une requête http get au bar_controller qui exécute ensuite la méthode. Mais je voudrais juste lancer la méthode sans le faire avec une requête http get ou post. Est-ce possible?

Il doit y avoir une référence à l'objet du contrôleur dans le test fonctionnel, mais j'apprends toujours le rubis et les rails, donc j'ai besoin d'aide.

Répondre

3

J'ai trouvé la réponse dans "Développement Web Agile avec Rails" Livre. ActionController :: TestCase initialise trois variables d'instance nécessaires à chaque test fonctionnel: @controller (contient l'instance du contrôleur en cours de test), @request et @response.

0

Vous devez appeler cette action avec verbe HTTP comme

get :foo 
post :foo 

etc ...

+0

ahh, je pense que je comprends maintenant. Je viens d'un arrière-plan Java. Donc, je suppose que les contrôleurs sont comme des servlets? Typiquement, les conteneurs du serveur instancient les servlets et de la même manière le serveur rails instancie les contrôleurs de sorte qu'ils doivent être accessibles via http. – Upgradingdave

+0

le ControllerTest envelopper l'objet dans Rails Stack. Vous êtes comme vous avez fait cette demande. Après que vous avez l'objet de demande et de réponse. – shingara

+0

Salut Shingara, j'ai pu mettre la main sur l'instance du contrôleur en utilisant @controller. Merci de votre aide. – Upgradingdave

Questions connexes