2011-02-17 2 views
4

Pour obtenir une liste des questionnaires j'utiliser lecomment puis-je tester rspec un contrôleur avec la route englobement

GET "/questionnaires/user/1/public/true/mine/true/shared/true" 

dans routes.rb Je

/questionnaires/*myparams(.:format) {:controller=>"questionnaires", :action=>"list"} 

Le contrôleur utilise la route pour créer un englobement requête dans la méthode de la liste

class QuestionnairesController < ApplicationController 
    before_filter :authenticate 

    def list 
    myparams = params[:myparams].split("/").to_h 
    end 

    # ... 
end 

Je suis en train de créer les cas de test pour toutes les options dans un fichier de spécification

describe "GET list" do 
    it "returns the list of questionnaires for the user" do 
    get :list 
    # ... 
    end 
end 

ce que je reçois quand je lance rspec est

Failures: 

1) QuestionnairesController List GET list returns the list of questionnaires for the user 
    Failure/Error: get :list 
    No route matches {:controller=>"questionnaires", :action=>"list"} 
    # ./spec/controllers/questionnaires_controller_spec.rb:20 

La question est de savoir comment écrivez-vous le fichier de spécification pour transmettre les paramètres de globbed à rspec. J'aime faire quelque chose comme ceci:

describe "GET list" do 
    it "returns the list of questionnaires for the user" do 
    get :list, "/user/1/public/true/mine/true/shared/true" 
    end 
end 

et changer les paramètres pour tester les différents cas

Répondre

1

Le globbing se passe dans le répartiteur, de sorte que les params sont déjà attribués lorsque le contrôleur est invoquée. Lorsque l'action du contrôleur est atteinte, les paramètres globbed doivent déjà être divisés en un tableau en params[:myparams].

Si vous voulez tester cela dans le contrôleur, juste mettre en place les params hachage la façon dont le régulateur serait:

describe "GET 'list'" do 
    it "should be successful" do 
    get :list, :myparams => "user/1/public/true/mine/true/shared/true".split("/") 
    response.should be_success 
    end 
end 
+0

J'ai fini en utilisant get: liste: myParams => « rspec/vrai/utilisateur /#{@user.id}/public/true/mine/false/shared/false "sans la scission, la scission se fait à l'intérieur du contrôleur – user567592

Questions connexes