2010-11-02 34 views
1

github上有一些資源How To: Test (devise) with Rails 3 and RSpec。 但如何是非常高的水平,我不能讓它在我的情況下工作。 什麼是正確的方式來插入或配置所有這些片斷,以管理測試需要記錄用戶的控制器(before_filter:authenticate_user!)???與factory_girl,devise,rpsec 2.0和rails 3.0問題=>無法獲得rspec來驗證控制器

現在我嘗試在單一控制器上運行rspec的..

require File.dirname(__FILE__) + '/../spec_helper' 
describe ArticlesController do 
    fixtures :all 
    render_views 

    before (:each) do 
    @user = Factory.create(:user) 
    sign_in @user 
    end 

    it "index action should render index template" do 
    get :index 
    response.should render_template(:index) 
    end 
end 

這裏是輸出當我運行rspec的

Failures: 
    1) ArticlesController index action should render index template 
    Failure/Error: Unable to find matching line from backtrace 
    SQLite3::ConstraintException: articles.user_id may not be NULL 

回答

0

看起來像你的燈具錯誤。錯誤消息是說它不能創建沒有user_id的文章。

您可以修復的燈具,或避免使用它們通過移除fixtures :all和磕碰find方法:

before(:each) do 
    @user = Factory.create(:user) 
    sign_in @user 
    Article.stub(:find).and_return([]) 
end 

這告訴find返回一個空數組,你的控制器索引操作應分配給用於模板的@articles實例變量。這應該足以讓模板無誤地呈現。

0

我固定夾具或應該說廠家是這樣的:

Factory.define :article do |e| 
    e.name "Article001" 
    e.user { |u| u.association(:user) } 
end 

,讓我這個新的錯誤...

Failures: 
    1) ArticlesController index action should render index template 
    Failure/Error: response.should render_template(:index) 
    expecting <"index"> but rendering with <"devise/mailer/confirmation_instructions">. 
    Expected block to return true value. 

我只是想看看我的測試的指數法我的文章控制器通過。我指出我對用戶創建不感興趣。錯誤告訴我用戶已經創建。

我想你的建議,但得到與「存根」

Failure/Error: Asset.stub(:find).and_return([]) 
    undefined method `stub' for #<Class:0x000000048310b8> 

什麼是fixture:all和你的方法之間最好的辦法停下來?