【问题标题】:How to test a url which doesn't exist in Rspec?如何测试 Rspec 中不存在的 url?
【发布时间】:2017-05-12 20:06:19
【问题描述】:

我想验证 我的 Web 应用程序中的 url 返回 404 Not found。我知道它不存在,但我需要通过 Rspec 的测试来确认。如何?这不起作用:

it "404" do
  get "/some_url_404"
  expect(response.status).to eq 404
end

测试本身失败:

ActionController::RoutingError: 没有路线匹配 [GET] "/some_url_404"

更新

尚未给出答案。

【问题讨论】:

标签: ruby-on-rails ruby testing rspec


【解决方案1】:

最合适的位置是request spec(spec/requests 子文件夹)。上面的 sn-p 应该可以按预期工作。

【讨论】:

  • 使测试成为请求规范不会改变底层的默认行为,它仍然会抛出异常。
【解决方案2】:

要实现这一点,您可以创建一个路由来匹配所有未使用此定义的路径:

get '*path', to: "controller#action"

上面的controller 和action 表示您希望所有未列出的路由请求都应该执行的控制器和操作。这是控制器操作的方式

#controller/action

def action
  render(:file => "#{Rails.root}/public/404.html", status: 404)
end

注意

确保路线位于路线的底部。如果没有,所有请求都将在那里结束。

【讨论】:

    【解决方案3】:

    here 帖子中涵盖了实际答案。

    你需要在 test.rb 中更改以下设置:

    consider_all_requests_local = false
    config.action_dispatch.show_exceptions = true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多