반응형
Rails / RSpec에서 예외 발생을 테스트하는 방법은 무엇입니까?
다음 코드가 있습니다.
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
RSpec을 통해 테스트하고 싶습니다. 내 코드는 다음과 같습니다.
it 'raises CarBrandNotFound exception' do
get :index, car_brand_id: 0
expect(response).to raise_error(Errors::CarBrandNotFound)
end
ID가 0 인 CarBrand가 존재하지 않으므로 컨트롤러 코드에서 Errors :: CarBrandNotFound가 발생하지만 테스트 코드는 아무것도 발생하지 않았다고 알려줍니다. 어떻게 고칠 수 있습니까? 내가 뭘 잘못 했어?
오류 처리를 지정하려면 블록에 대한 기대치를 설정해야합니다. 객체를 평가해도 오류가 발생할 수 없습니다.
따라서 다음과 같이하고 싶습니다.
expect {
get :index, car_brand_id: 0
}.to raise_error(Errors::CarBrandNotFound)
자세한 내용은 예상 오류 를 참조하세요.
그래도 사양 결과까지 예외가 발생하지 않는다는 사실에 약간 놀랐습니다.
사용 expect{}
대신에 expect()
.
get :index
예외를 발생시키지 않습니다. 실제 서버가하는 것처럼 응답을 500 오류로 설정합니다.
대신 다음을 시도하십시오.
it 'raises CarBrandNotFound exception' do
controller.params[:car_brand_id] = 0
expect{ controller.car_brand }.to raise_error(Errors::CarBrandNotFound)
end
참고 URL : https://stackoverflow.com/questions/22141601/how-to-test-exception-raising-in-rails-rspec
반응형
'developer tip' 카테고리의 다른 글
RVM 사용자에게 sudo 액세스 권한을주지 않고 RVM 시스템 요구 사항을 설치하는 방법 (0) | 2020.10.28 |
---|---|
WPF로 로그 뷰어 구현 (0) | 2020.10.28 |
Java의 SOAPMessage에서 원시 XML 가져 오기 (0) | 2020.10.28 |
SQL Azure 데이터베이스의 이름을 바꾸시겠습니까? (0) | 2020.10.28 |
장고 파일 필드 삭제 (0) | 2020.10.28 |