14

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

有任何想法吗?

4

4 回答 4

12

所以我发现我可以在 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
于 2012-06-28T22:47:40.407 回答
8

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

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
于 2013-04-16T23:15:01.673 回答
0

如果您使用的是 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方法(尽管您可能已经这样做了)。

于 2019-09-09T08:31:06.010 回答
0
allow(User).to receive(:find).and_raise('500 error')
get "/users/#{user.id}"
expect(response.status).to eq 500
于 2020-01-13T17:17:09.890 回答