2010-08-12 5 views
0

Je travaille dans Rspec de ROR .. J'essaie de tester mes contrôleurs en utilisant RSpec.je suis ayant un contrôleur d'utilisateurs avec des fonctions comme les nouvelles, les balises, etc.Rspec test pour l'existence d'une action ne fonctionne pas

i créé un fichier sous spec/users_controller_spec.rb

et a ajouté les cas de test comme.

require 'spec_helper' 

describe UsersController do 
    integrate_views 

    it "should use UsersController" do 
    controller.should be_an_instance_of(UsersController) 
    end 


    describe "GET 'new'" do 
    it "should be successful" do 
     get 'new' 
     response.should be_success 
    end 

    it "should have the title" do 
     get 'new' 
     response.should have_tag("title", "First app") 
    end 
    end 
end 

qui passe.

Mais quand j'ajouter un test pour les balises .. comme

describe "GET 'tags'" do 
    it "should be successful" do 
     get 'tags' 
     response.should be_success 
    end 
    end 

il en résulte une erreur

F ...

1) tags 'UsersController GET' 'devrait être couronnée de succès' FAILED succès attendu? pour retourner vrai, a obtenu faux

pourquoi il vient comme ça ?? Je suis très nouveau à ROR et ne peux pas trouver la raison pour laquelle je reçois cette erreur .. Comment faire ce passage. Aussi je essayé l'URL

http://localhost:3000/users/tags qui est en cours d'exécution pour moi .. Mais sur les essais en utilisant les spécifications de spécification $/je reçois l'erreur ..

+0

Pouvez-vous montrer votre itinéraire pour ce contrôleur? – bjg

+0

j'ai recherché dans les routes.rb pour l'existence de map.tags '/ tags',: controller => 'users',: action => 'tags' Mais ce n'était pas là ... Même si j'ai ajouté ceci et lancer la spécification im obtenir la même erreur. – useranon

Répondre

0

Votre test peut être un échec pour un certain nombre de raisons. L'itinéraire nécessite-t-il un ID dans le paramètre hash? L'action du contrôleur est-elle redirigée? Le contrôleur génère-t-il une erreur?

Vous devrez regarder le code du contrôleur/et/ou routes.rb pour découvrir la cause de l'échec. Prenez note des filtres before dans le contrôleur, ce qui peut empêcher l'accès à l'action.

0

Vous devez ajouter des itinéraires personnalisés qui ne font pas partie des 7 routes par défaut. En supposant que vous avez resources :users dans vos itinéraires, vous devrez le modifier. Je suppose également que l'itinéraire de vos tags est unique pour les utilisateurs individuels.

resources :users do 
    member do 
    # creates /users/:user_id/tags 
    get :tags 
    end 
end 

Et dans votre test RSpec vous l'appelez comme

describe '#tags' do 
    user = create :user 
    get :tags, user_id: user.id 
end 

Si la route est de ne pas être unique par utilisateur l'autre option est une collection de route, quelque chose comme:

resources :users do 
    collection do 
    # creates /users/tags 
    get :tags 
    end 
end 
Questions connexes