【问题标题】:Is there a way to write tests for 500 error page in Rails?有没有办法在 Rails 中为 500 错误页面编写测试?
【发布时间】:2012-06-27 03:37:36
【问题描述】:

我的 Rails 应用程序中有一个自定义错误页面,测试 404 错误似乎很简单(获取不存在的页面并对某些文本执行 assert_match/select),但我想知道如何测试 500 错误页面。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    所以我发现我可以在 rspec 中做这样的事情

    def other_error
       raise "ouch!"
    end
    
    it "renders 500 on Runtime error" do
      get :other_error
      response.should render_template("errors/500")
      response.status.should == 500
    end
    

    【讨论】:

    • 澄清一下,您是在想象某个控制器上的 other_error 方法,而不是您的 rspec 测试中的辅助方法,对吧?我希望后者工作,但认为这是一个梦想。
    【解决方案2】:

    假设您使用的是,这就是我所做的: 首先,您需要找到调用方法的控制器操作。例如,您可能有一个UserController 和一个调用User.findshow 操作。在这种情况下,您可以执行以下操作:

    it "should render the 500 error page when an error happens" do
      # simulate an error in the user page
      User.should_receive(:find).and_raise("some fancy error")
      visit '/user/1'
    
      # verify status code
      page.status_code.should eql(500)
    
      # verify layout
      page.title.should eql('Your site title')
      page.should have_css('navigation')
      page.should have_css('.errors')
    end
    

    【讨论】:

    • 这会为我返回 404 错误的状态代码,而不是 500 :(
    【解决方案3】:

    如果您使用的是 rspec,则可以使用 controller 块并在那里定义一些正在测试的测试操作:

    describe ApplicationController, type: :controller do
      controller do
        def index
          fail 'Something bad happened'
        end
      end
    
      it 'returns an error page'
        get :index
        expect(response.status).to eq 500
        expect(response).to render_template 'errors/500'
      end
    end
    

    type: :controller 很重要,否则 RSpec 不会公开 controller 方法(尽管您可能已经这样做了)。

    【讨论】:

      【解决方案4】:
      allow(User).to receive(:find).and_raise('500 error')
      get "/users/#{user.id}"
      expect(response.status).to eq 500
      

      【讨论】:

        猜你喜欢
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多