2014-03-31 27 views
1

我正在爲一個控制器編寫請求規範,並且我希望通過AJAX調用另一個控制器的方法。 AJAX調用中的控制器操作用於對地址進行地理定位,並與請求的其餘部分無關。控制器動作總是不呈現任何內容。Rspec:stub out控制器動作

我已經試過:

before :each 
    AddressesController.any_instance.stub(:update).and_return nil 
end 

然而,這給了我一個錯誤:

Failure/Error: Unable to find matching line from backtrace 
ActionView::MissingTemplate: 
    Missing template addresses/update, application/update 

沒有視圖模板存在的行動,因爲它總是呈現什麼。

有沒有一種方法可以完全排除其他控制器的操作,還是需要將該方法的內部存根取出?

回答

0

您將無法從請求規範中存儲控制器操作。但是,您可以存根AJAX請求,以便控制器操作永遠不會到達。 Webmock是個不錯的選擇。

0

有關更多說明,請參見this thread。就像你剛纔提到的那樣,你應該改寫方法的內部。

+0

我以前見過這個問題,但是我不明白它與我的問題有什麼關係。奇怪的是,這個問題似乎在測試Rails如何處理控制器錯誤,爲此我認爲對內部進行存根是有意義的。我在問一個單獨控制器的動作是否存在,我不想考慮這個動作的內部情況,因爲它與我試圖測試的內容無關。我錯過了什麼嗎?有沒有辦法做到這一點? – eirikir