jpw*_*ynn 5 controller rspec ruby-on-rails
在我的一些控制器中,我有一个没有相应路由的操作,因为它只能通过render ... and return其他控制器操作中的访问。
例如我有一个动作
def no_such_page
# displays a generic error screen
end
Run Code Online (Sandbox Code Playgroud)
在我的 RSpec 控制器测试中,如何“获取”该方法并查看响应主体?
如果我尝试:
get :no_such_page
response.status.should be(200)
Run Code Online (Sandbox Code Playgroud)
它当然给出了错误
No route matches {:controller=>"foo", :action=>"{:action=>:no_such_page}"}
Run Code Online (Sandbox Code Playgroud)
更新
回顾你的问题,现在对我来说没有意义,因为你说你只是通过访问此操作render ... and return,但render呈现视图,而不是操作。您确定您需要执行此操作吗?我认为视图规范是进行此测试的地方。
原答案
测试永远不会通过 HTTP 请求调用的操作的响应代码是没有意义的。同样get :no_such_page没有意义,因为您无法“获取”该操作(没有到达该操作的路径),您只能调用该方法。
从这个意义上说,测试它的最佳方法是将其视为类上的任何其他方法,在这种情况下,该类是您的控制器,例如PostsController。所以你可以这样做:
describe PostsController do
... other actions ...
describe "no_such_page" do
it "displays a generic error screen" do
p = PostsController.new
p.should_receive(:some_method).with(...)
p.no_such_page
end
end
end
Run Code Online (Sandbox Code Playgroud)
但事实上,从你所写的内容来看,在我看来,你的操作中没有任何内容,你只是在测试相应视图生成的 HTML 输出。如果是这种情况,那么您实际上根本不应该在控制器规范中测试它,只需使用视图规范来测试它,这更适合测试响应正文的内容。
| 归档时间: |
|
| 查看次数: |
2946 次 |
| 最近记录: |