【发布时间】:2012-11-28 23:50:05
【问题描述】:
在我的一些控制器中,我有一个没有相应路由的操作,因为在其他控制器操作中只能通过 render ... and return 访问它。
例如,我有一个动作
def no_such_page
# displays a generic error screen
end
在我的 RSpec 控制器测试中,我如何“获取”该方法并查看响应正文?
如果我尝试:
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 and return”来呈现错误页面而不是默认页面看法。所以在我看来,在某处测试 no_such_page() 控制器方法是非常有意义的。问题是控制器方法 no_such_page() 没有路由,但确实接受错误消息,然后传递给它的视图。这就是它被实现为控制器方法的原因。
-
但是你不需要
no_such_page的控制器动作,你只需要一个视图。你没有重定向到它,只是渲染它。
标签: ruby-on-rails rspec controller