2011-11-28 59 views
8

我有一個Posts控制器,我剛剛安裝了Devise,以便快速輕鬆地添加一些身份驗證。在我安裝Devise之前,我爲Posts控制器的'新'動作創建了一些測試。安裝設計之後,我的測試失敗,直到我說的Rspec,設計,工廠女孩 - 如何通過Rspec控制器測試登錄工廠用戶?

config.include Devise::TestHelpers, :type => :controller 

行我spec_helper.rb文件。

我也有我的PostsController行

before_filter :authenticate_user!, :except => [:show, :index] 

現在,當我跑我的測試中,他們都通過這些除外2:

it "should be successful" do 
    get :new 
    response.should be_success 
    end 

    it "should have the right title" do 
    get :new 
    response.should have_selector('title', :content => @base_title + " | New post") 
    end 

我用廠的姑娘爲好。該錯誤是由before_filter except參數引起的。我需要能夠通過工廠用戶在rspec中登錄用戶。如何在Rspec控制器測試中籤署Factory用戶?我如何定義工廠用戶?

我在factories.rb試過這樣:

Factory.define :user do |user| 
    user.name     "Test User" 
    user.email     "[email protected]" 
    user.password    "password" 
    user.password_confirmation "password" 
end 

但後來我得到的錯誤:

NoMethodError: 
    undefined method `password_salt=' for #<User:0x00000103cac958> 

任何幫助將非常感激。謝謝。

回答

7

我強烈建議刪除你的控制器測試,並使用黃瓜的故事 - RSpec不像黃瓜那樣方便測試面向用戶的東西。

在黃瓜中,您需要通過用戶界面登錄以模擬用戶將要執行的操作。我傾向於在控制器規範中做同樣的事情,儘管有些人可能更喜歡嘲笑事物。

至於undefined method password_salt=,您是否遷移了您的測試數據庫?

+0

ahhhh完全忘記遷移測試數據庫...現在我得到:'失敗/錯誤:@user = create!(工廠(:用戶)) ActiveRecord :: RecordInvalid: 驗證失敗: t爲空,密碼不能爲空' – Jack

+0

什麼代碼給出了這個錯誤? (錯誤信息應該有一個文件名和行號。) –

+0

這是在我的帖子控制器測試之前(:每個)做 @user = create!(工廠(:用戶)) test_sign_in(@user) end' – Jack