加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rspec中,如何测试没有路由的控制器操作?

发布时间:2020-12-17 02:14:50 所属栏目:百科 来源:网络整理
导读:在我的一些控制器中,我有一个没有相应路径的动作,因为它只能通过渲染来访问…并返回其他控制器动作. 例如,我有一个动作 def no_such_page # displays a generic error screenend 在我的RSpec控制器测试中,我如何“获得”该方法并查看响应体? 如果我尝试: g
在我的一些控制器中,我有一个没有相应路径的动作,因为它只能通过渲染来访问…并返回其他控制器动作.

例如,我有一个动作

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: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

但事实上,根据你所写的内容来判断,我觉得你的行为中没有任何内容,而你只是测试相应视图生成的HTML输出.如果是这种情况,那么你真的不应该在控制器规范中测试它,只需使用view spec测试它,这更适合测试响应体的内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读