Есть ли способ написать тесты для 500 страниц ошибок в Rails?

У меня есть страница с ошибками в приложении для проверки rails. Ошибка 404 кажется достаточно прямой (получить несуществующую страницу и сделать assert_match/select для определенного текста), но мне интересно, как протестировать страницу с ошибкой 500.

Любые идеи?

Ответы

Ответ 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

Ответ 2

Вот что я делаю, предполагая, что вы используете rspec, и : Во-первых, вам нужно найти действие контроллера, которое вызывает метод. Например, у вас может быть 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

Ответ 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 (хотя вы, вероятно, уже делаете это).