2012-11-21 131 views
4

我試圖測試padrino控制器,它依賴於Padrino ::管理提供current_account :: AccessControl的上Padrino模擬current_account對RSpec的測試

要做到這一點,我需要模擬current_account。

的代碼是一樣的東西:

App.controller :post do 
    post :create, map => '/create' do 
    Post.create :user => current_account 
    end 
end 

和RSpec的:

describe "Post creation" do 
    it 'should create' do 
    account = Account.create :name => 'someone' 
    loggin_as account #to mock current_account 
    post '/create' 
    Post.first.user.should == account 
    end 
end 

我如何能實現 「loggin_as」 或者我怎麼能寫這樣的測試?

回答

3

我發現了一個簡單的方法來測試:

App.any_instance.stub(:current_account).and_return(account) 

因此,測試代碼應該是:

describe "Post creation" do 
    it 'should create' do 
    account = Account.create :name => 'someone' 
    App.any_instance.stub(:current_account).and_return(account) 
    post '/create' 
    Post.first.user.should == account 
    end 
end 

,但我還是喜歡打造 「loggin_as」 幫手。那麼,我該如何動態獲取App類? (我應該爲這個問題創建另一個線程?)

+3

gotcha。要獲得應用程序類只需使用「應用程序」而不是「應用程序」 – cpereira

+0

肯定cpeireira?因爲我得到: 故障/錯誤:app.any_instance.stub(:current_account).and_return(@admin) NoMethodError: 未定義的方法'any_instance」爲# leucos

+1

什麼RSpec的和padrino版本你正在用嗎? – cpereira