2013-08-22 4 views
2

J'apprends des tests avec RSPEC et usine fille sur Rails et je ne peux pas réussir à les faire fonctionner.test rspec de mon contrôleur retourne zéro (+ usine fille)

Mon contrôleur de l'utilisateur ressemble à ceci:

class UsersController < ApplicationController 
    def index 
    @users = User.all.order(:first_name) 
    end 
end 

et les essais:

require 'spec_helper' 

describe UsersController do 

before(:each) do 
    @user1 = FactoryGirl.create(:user, first_name: "B", last_name: "B", uid: "b") 
    @user2 = FactoryGirl.create(:user, first_name: "A", last_name: "A", uid: "a") 
end 

describe "GET index" do  
    it "sets a list of users sorted by first name" do 
     get :index 
     assigns(:users).should == [@user2, @user1] 
    end 
end 
end 

Mais les essais renvoie les éléments suivants:

UsersController GET index sets a list of users sorted by first name 
Failure/Error: assigns(:users).should == [@user2, @user1] 
expected: [#<User id: nil, email: nil, first_name: "A", last_name: "A", uid: "a", active: true, admin: false, created_at: nil, updated_at: nil, reset_date: nil>, #<User id: nil, email: nil, first_name: "B", last_name: "B", uid: "b", active: true, admin: false, created_at: nil, updated_at: nil, reset_date: nil>] 
got: nil (using ==) 
# ./spec/controllers/users_controller_spec.rb:13:in `block (3 levels) in <top (required)>' 

Avez-vous une idée de ce que je je fais mal?

À la votre!

Voici les 'routes râteau':

 Prefix Verb URI Pattern      Controller#Action 
     root GET /        meetings#index 
    meetings GET /meetings(.:format)    meetings#index 
     login GET /login(.:format)     sessions#new 
     logout GET /logout(.:format)     sessions#destroy 
      POST /auth/:provider/callback(.:format) sessions#create 
auth_failure GET /auth/failure(.:format)   sessions#failure 
     users GET /users(.:format)     users#index 
      POST /users(.:format)     users#create 
    new_user GET /users/new(.:format)    users#new 
    edit_user GET /users/:id/edit(.:format)   users#edit 
     user GET /users/:id(.:format)    users#show 
      PATCH /users/:id(.:format)    users#update 
      PUT /users/:id(.:format)    users#update 
      DELETE /users/:id(.:format)    users#destroy 
+1

Pourriez-vous signaler votre usine d'utilisateur s'il vous plaît. –

+0

Avez-vous vérifié vos itinéraires (par exemple, la sortie de «rake routes»)? –

+0

assurez-vous que l'appel 'FactoryGirl.create' crée réellement un enregistrement dans la base de données. Vous devez garder à l'esprit que les usines devraient au moins passer toutes les validations. – jvnill

Répondre

0

Comme Jvnill dit ci-dessus, utiliser créer. L'autre option consiste à utiliser @ user1.save après les avoir déclarées.

Aussi loin que les routes vont, vérifiez vos ressources dans le fichier routes.

Questions connexes