我想測試一下控制器操作是否在某些before_filter中沒有發生重定向時實際調用。由於控制器操作本身可能會執行重定向操作,因此我希望存儲操作以引發特定錯誤(SuccessfulActionError或類似操作),然後檢查該錯誤是否爲調用該方法的指示符。在Rspec控制器測試中存在存根控制器操作,但它仍然執行
因此,我增加了以下內容:
controller.stub!(:action).and_raise(SuccessfulActionError)
它的工作原理莫名其妙,異常被引發,但該方法的實際代碼仍在執行(例如,如果我在的的ID發送不存在記錄到'show'動作,它會拋出一個ActiveRecord :: RecordNotFound異常)。
這是爲什麼?我想完全殘留的行動,如果它被實施爲
def action
raise SuccessfulActionError
end
我做錯了什麼?這是錯誤的方法?
編輯:
使用
controller.should_receive(:action)
也不起作用。
我覆蓋在這樣的before_all過濾器來解決未從ApplicationController中拿起default_url_options:
class MyController
def default_url_options(options = {})
{ :locale => params[:locale] }
end
end
莫非是罪魁禍首?當我不幸地移除它時,規格根本無法使用。
我有同樣的問題在http://stackoverflow.com/questions/5881459/how-to-test-that-a-before-filter-works-correctly-with-rspec-in-rails,有你找到了解決方案嗎? – Kostas 2011-05-04 09:52:35