2011-06-24 40 views
1

我將集成的rails應用程序與omniauth和devise集成在一起。在一個控制器我有 -Rspec在控制器中跳過設計動作 - sign_in_and_redirect

def create 
    # some 
    # stuff 
    # here 
    sign_in_and_redirect(:person, @person) 
    # some 
    # stuff 
    # here 
end 

因爲這種行動是從色器件,我不應該測試這種行動,但它只是存在(這裏糾正我,如果我錯了。)。另外,由於我嘲笑這個人物,它沒有傳遞原點sign_in_and_redirect動作的方法。

那麼,如何測試這個控制器呢?

UPDATE

我在之前做塊嘗試這 -

controller.stub!(:sign_in_and_redirect).and_return(true) 

但是,這給我的錯誤是 - 缺少templace認證/創建 我沒有任何create.html上。 erb,因爲它在正常的工作流程中重定向。


UPDATE

我AuthencationController#創建方法的代碼可以看到這裏 - http://www.pastie.org/2116067 我的測試代碼可以在這裏看到 - http://www.pastie.org/2116081

回答

4

最後我發現它與設計有關。

該解決的問題 - 設計 - 維基How To: Controllers and Views tests with Rails 3 (and rspec)

我必須包括支持/ devise.rb文件及以下線路 -

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

之後,我只是磕碰它需要添加方法,類人它的工作。

2

sign_in_and_redirect給你一個MissingTemplate錯誤,因爲實際的方法做了重定向,而存根沒有,所以Rails假定你想呈現模板。

我不應該測試這個動作,但只有存在它

你應該指定如何create的行爲,沒有什麼方法它內部調用。這與嘲笑與另一個組件(如模型)的交互不一樣。

由於您正在向後工作(在編寫示例之前編寫代碼),我建議您先從一個根本不存在任何殘留或嘲諷的示例開始,並讓它通過。然後,您可以嘗試剔除碎片以與模型隔離,但從Devise隔離沒有任何好處。

相關問題