Я хочу протестировать этот маршрут, который я сделал на Синатре:
get '/party' do
begin
party_source.parties
rescue Exceptions::SourceNotFoundError
status 404
rescue Exceptions::SourceInternalError
status 503
end
end
И я написал этот тест (предположим, что party_source доступен для теста, в реальном коде он есть):
require 'rack/test'
def test_correct_status_code_when_get_error_404
source_404 = mock()
source_404.expects(:parties).with(nil).raises(Exceptions::SourceNotFoundError)
MyApp.party_source = source_404
get '/party'
assert_equal 404, last_response.status
end
Когда я запускаю этот тест, он не проходит, потому что вместо 404 (мой код) я получаю статус 500. Независимо от того, какое исключение я поднимаю, я всегда получаю и статус 500, который, как мне кажется, генерируется Sinatra или Rack.
Как я могу проверить это дело?
Обновление
Как я понимаю, исключения не попадают в мои блоки спасателей,Рэк или Синатра получают его и обрабатывают ответное сообщение HTTP Status 500.
Я не могу понять, как игнорируется мой блок кода спасения.