检查页面500和404的测试用例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查页面500和404的测试用例相关的知识,希望对你有一定的参考价值。

我试图通过404和500页的测试用例。但是我遇到了很多问题

1)首先,我在app / views / errors /中有一个页面500.html.erb,它没有被调用。 2)如果我运行以下测试我的系统冻结,我需要重新启动我的系统 3)如果我评论此行期望{get“/errors/foo"}.to raise_exception(ActionController :: RoutingError)。所以在我的控制器中,动作名称页面500作为参数传递但仍然,我的系统被冻结

任何人都可以帮我解决这个问题

errors_spec.rb

 require "spec_helper"

    describe "Errors" do

      before do
        allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))
      end

      it "renders the 500 page" do
         get "/errors/500"
         expect(response.status).to eq(500)
      end

      it "renders the 404 page" do
        get "/errors/404"
        expect(response.status).to eq(404)
      end

      it "raises an exception if the page doesn't exist" do
        expect {get "/errors/foo"}.to raise_exception(ActionController::RoutingError)
      end
    end 

errors_controller.rb

class ErrorsController < ApplicationController
  skip_before_filter :authenticate_user!

  EXTERNAL_ERRORS = ['sso']
  VALID_ERRORS = ['404', '403', '500', 'maintenance'] + EXTERNAL_ERRORS

  def show
    status = external_error? ? 500 : 200
    render page , status: status
  end

  def blocked
  end

  private

  def page
    if VALID_ERRORS.include?(params[:id])
      params[:id]
    else
      raise(ActionController::RoutingError.new("/errors/#{params[:id]} not found"))
    end
  end

  def external_error?
    EXTERNAL_ERRORS.include?(params[:id])
  end
end
答案

在您的代码中,当调用/ errors / 500时,您将设置状态200。

  def show
    # external_error? returns false.
    status = external_error? ? 500 : 200
    render page , status: status # Status is 200.
  end

使用prybyebug等调试器来检查状态。您的测试用例没有任何问题。试试这个。

class ErrorsController < ApplicationController
  skip_before_filter :authenticate_user!

  EXTERNAL_ERRORS = ['sso']
  VALID_ERRORS = ['404', '403', '500', 'maintenance'] + EXTERNAL_ERRORS

  def show
    status = error_500? ? 500 : 200
    render page , status: status
  end

  def blocked
  end

  private

  def page
    if VALID_ERRORS.include?(params[:id])
      params[:id]
    else
      raise(ActionController::RoutingError.new("/errors/#{params[:id]} not found"))
    end
  end

  def external_error?
    EXTERNAL_ERRORS.include?(params[:id])
  end

  def error_500?
    ['500'].include?(params[:id]) || external_error?
  end
end

以上是关于检查页面500和404的测试用例的主要内容,如果未能解决你的问题,请参考以下文章

python测试开发django-96.404和500页面处理

Tomcat更改错误页面指向,改变404,500错误页面

nginx设置404 500页面跳转至首页,K哥

RSpec2 错误代码测试

如何将不存在的页面显示为404错误页面

ASP.NET自定义404和500错误页面