Jest następujący kod:
def index
@car_types = car_brand.car_types
end
def car_brand
CarBrand.find(params[:car_brand_id])
rescue ActiveRecord::RecordNotFound
raise Errors::CarBrandNotFound.new
end
Chcę to przetestować przez RSpec. Mój kod to:
it 'raises CarBrandNotFound exception' do
get :index, car_brand_id: 0
expect(response).to raise_error(Errors::CarBrandNotFound)
end
CarBrand z identyfikatorem równym 0 nie istnieje, dlatego mój kod kontrolera zgłasza Errors :: CarBrandNotFound, ale mój kod testowy mówi mi, że nic nie zostało zgłoszone. Jak mogę to naprawić? Co się mylę?
ruby-on-rails
ruby
rspec
malcoauri
źródło
źródło
get :index, car_brand_id: 0
sobie nie powoduje błędu.Użyj
expect{}
zamiastexpect()
.źródło
( )
się{ }
! Dziękuję bardzoget :index
nigdy nie zgłosi wyjątku - raczej ustawi odpowiedź na błąd 500 w taki sposób, jak zrobiłby to prawdziwy serwer.Zamiast tego spróbuj:
it 'raises CarBrandNotFound exception' do controller.params[:car_brand_id] = 0 expect{ controller.car_brand }.to raise_error(Errors::CarBrandNotFound) end
źródło