我想在规范中断言 404

I want to assert for 404 in spec

我想测试重定向到自定义 404、500 错误页面的应用。我在 test.rb 文件中打开 config.consider_all_requests_local = false 来检查错误页面。 现在一切正常,如果路径存在于 rake 路由中,我可以填写字段并使用 capybara 进行断言,例如:

visit signin_path 

问题是如果我给了一个错误的路径,比如

visit signin_path + '/xyz' #xyz is incorrent

visit ('/wrongpage') 

为了检查重定向到我的自定义错误页面,测试用例给出了一个异常并且没有继续执行 expect 语句。这是错误:

Failure/Error: visit ('/wrongpage')

ActionController::RoutingError:
  No route matches [GET] "/wrongpage"

#then stack trace is printed here

我也试过检查

expect(page).to raise_error(ActiveRecord::RecordNotFound)

当我尝试获取带有无效 id 的记录时(比如 id = 'xyz' 而不是整数,这会产生 500 错误),这里出现同样的问题,执行停止并且不会继续执行期望语句。

我也尝试在互联网上寻找答案,但没有得到我想要的东西,这 () 很接近,但对于

visit page_path

给出以下错误:

    Failure/Error: visit page_path('wrongpage')

 NoMethodError:
   undefined method `page_path' for ....

Rails 默认情况下期望在 config/routes.rb

中定义所有路由

如果您想将所有未知路由重定向到某个已知端点,您可以在路由文件底部添加如下一行:

get '*path', to: 'home#index' #or whatever your default root path might be

应该没有必要测试 404 错误,因为如果没有找到您的路由,Rails 将引发异常,除非您按上述方式处理它。

Rails.application.config.action_dispatch.show_exceptions

这就是问题所在!

它的值应该设置为true

可以通过两种方式完成,或者在 test.rb 文件中将其设置为:

# Raise exceptions instead of rendering exception templates
  config.action_dispatch.show_exceptions = true

  before(:all) do
  Rails.application.config.action_dispatch.show_exceptions = true
  end

此外,不要忘记检查:config.consider_all_requests_local = false,以显示您的自定义错误页面(在您当前的环境中)。