在我的一些控制器中,我有一個操作沒有相應的路由,因爲只能通過其他控制器操作中的render ... and return
訪問它。在Rspec中,如何測試沒有路由的控制器操作?
例如,我有一個動作
def no_such_page
# displays a generic error screen
end
在我的RSpec的控制器測試,我怎麼「GET」這個方法,並期待在響應體?
如果我嘗試:
get :no_such_page
response.status.should be(200)
當然它給人的錯誤
No route matches {:controller=>"foo", :action=>"{:action=>:no_such_page}"}
測試永不會通過HTTP訪問的動作的響應代碼沒有意義。同樣,'get'也不相關,因爲該操作只是通過(內部)方法調用呈現。 –
在我的很多控制器方法中,如果某些條件不滿足(例如用戶權限),我使用「render:action =>:no_such_page並返回」來呈現錯誤頁面而不是默認視圖。因此,在我看來,測試no_such_page()控制器方法是非常合理的。問題是控制器方法no_such_page()沒有路由,但確實接受錯誤消息,然後傳遞給它的視圖。這就是爲什麼它是作爲控制器方法實現的。 – jpwynn
但是您不需要'no_such_page'的控制器操作,您只需要一個視圖。你沒有重定向到它,只是渲染它。 –