Ответ 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
У меня есть страница с ошибками в приложении для проверки rails. Ошибка 404 кажется достаточно прямой (получить несуществующую страницу и сделать assert_match/select для определенного текста), но мне интересно, как протестировать страницу с ошибкой 500.
Любые идеи?
Итак, я узнал, что я могу сделать что-то подобное в 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
Вот что я делаю, предполагая, что вы используете rspec, rspec-mocks и capybara:
Во-первых, вам нужно найти действие контроллера, которое вызывает метод. Например, у вас может быть 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
Если вы используете 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
(хотя вы, вероятно, уже делаете это).