如何测试Rspec中不存在的URL?

时间:2016-12-28 14:07:36

标签: ruby-on-rails ruby testing rspec

我想验证我的网络应用程序中的我的网址会返回404 Not found。我知道它不存在,但我需要通过Rspec的测试确认。怎么样?这不起作用:

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

测试本身失败了:

的ActionController :: RoutingError:        没有路线匹配[GET]“/ some_url_404”

更新

答案尚未给出。

3 个答案:

答案 0 :(得分:0)

最合适的地方是request specspec/requests子文件夹)。上面的代码段应该按预期工作。

答案 1 :(得分:0)

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

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

上面的controlleraction表示您希望对未列出的路线的所有请求都应该使用的控制器和操作。以下是控制器操作的方式

#controller/action

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

注意

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

答案 2 :(得分:0)

实际答案已在帖子here中介绍。

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

consider_all_requests_local = false
config.action_dispatch.show_exceptions = true