我想在规范中断言404

时间:2018-04-23 06:05:46

标签: ruby-on-rails ruby rspec capybara capybara-webkit

我想测试我的应用程序,该应用程序重定向到自定义的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错误)时,此处存在同样的问题,执行停止并且不会进入expect语句。 / p>

我也尝试在互联网上寻找答案,但没有得到我想要的东西,这个(https://stackoverflow.com/a/25469175/2924562)很接近但

visit page_path

给出以下错误:

    Failure/Error: visit page_path('wrongpage')

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

2 个答案:

答案 0 :(得分:0)

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

中定义所有路由

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

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

不应该测试404错误,因为如果找不到你的路由,Rails会引发异常,除非你按上面所示处理它。

答案 1 :(得分:0)

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 ,以显示您的自定义错误页面(在您当前的环境中)。