2013-08-22 64 views
2

我正在使用rspec和工廠女孩在Rails上學習測試,我無法設法使它們工作。我的控制器的rspec測試返回零(+工廠女孩)

我的用戶控制器看起來是這樣的:

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

和測試:

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 

但測試返回以下內容:

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)>' 

你有任何想法我我做錯了嗎?

乾杯!

這裏是 '耙路線':

 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

請問您可以發佈您的用戶工廠嗎? – 2013-08-22 15:17:41

+0

您是否檢查過您的路線(例如「耙路線」的輸出)? –

+0

確保調用'FactoryGirl.create'實際上在數據庫中創建了一條記錄。你應該記住,工廠至少應該通過所有的驗證。 – jvnill

回答

0

正如Jvnill上面所說的,使用創建。另一個選項是在聲明它們之後使用@ user1.save。

同樣就路由而言,請檢查您的路由文件中的資源。