방관자와 우스갯소리로 각도 10의 차단기를 테스트하다
9018 단어 angulartestingjavascript
각도, 관중, 농담 설정
본고의 목적에서 우리는 당신이 이미 《방관자》와 《조커》를 사용하여 각도 항목을 설정했다고 가정할 것이다.없으면 라이브러리를 사용하여 Angular를 설정하는 방법에 대한 링크를 제공합니다.
농담
비록 이 글의 중점은 인과응보와 재스민을 어떻게 우스갯소리로 바꾸는가가 아니지만, 다음은 어떻게 스스로 이런 전환을 하는지에 관한 자원 목록이다.또한 myGithub project를 템플릿으로 사용할 수 있습니다.다른 테스트 프레임워크를 사용하는 것에 익숙해지면 Jest가 좀 이상할 수도 있지만, 이런 괴벽들은 가치가 있다.
관중
'방관자'는 각도 단원 테스트를 설정하는 데 사용되는 지루한 템플릿 코드를 몇 줄로 줄이는 놀라운 라이브러리이다.그것은 가치를 제공하기 때문에 괴벽이 있다.
몇 가지 일이 있다
'방관자'와'우스갯소리'를 함께 사용할 때 기억해야 할 주요 점은 Specator 가져오기는
@ngneat/spectator/jest
패키지에서 가져와야 한다는 것이다.'@ngneat/consident/jest'에서 {createHttpFactory, HttpMethod, considentHttp} 가져오기;
다음은
package.json
의 최종 devDependencies 섹션입니다.{
…
“devDependencies”:{
“@angular devkit/build angular”:“~ 0.901.7”,
“@angular/cli”:“~ 9.1.7”,
“@angular/compiler cli”:“~9.1.9”,
“@ngneat/consident”:“^5.13.3”,
“@types/jest”:“^26.0.13”,
“@types/node”:“^12.11.1”,
“codelyzer”:“^5.1.2”,
“jest”:“^26.4.2”,
“jest preset angular”:“^8.3.1”,
"각도기":"~7.0.0",
"ts 노드":"~ 8.3.0",
“tslint”:“~ 6.1.0”,
“typescript”:“~ 3.8.3”
}
}
각도 10 차단기 단위 테스트
이 예에서 Http 차단기를 테스트합니다. 이 차단기는 Http ErrorResponses를 컨트롤러에 기록합니다.
"@angular/core"에서 {Injectable} 가져오기;
가져오기
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor、HttpErrorResponse、HttpResponse
} "@angular/common/http"
"rxjs"에서 {Observable,throwError} 가져오기;
"rxjs/operators"에서 {catchError 가져오기};
/**
* HttpRequests를 차단하고 3xx의 모든 http 응답을 기록합니다 +
* 나중에 상태 코드에 따라 조건부 재시도를 할 수 있습니다.
*
*/
@ 주사 가능({providedIn:'루트'})
클래스 내보내기 HttpErrorInterceptor 구현 HttpInterceptor {
구조 함수 () {}
차단(요청: HttpRequest, 다음: HttpHandler): 관찰 가능 >{
다음은 돌아와.손잡이 (req).파이프 (헤드 뽑기 () = > {}),
catchError (오류) = >
if(HttpErrorResponse의 오류 인스턴스) {
if (error.error 및 error.error.message) {
위로하다로그 ('상태:'+error.status+'\n 메시지:'+error.error.message);
} 기타
위로하다로그 (오류);
}
}
투척자 되돌리기(오류);
})
);
}
}
이 코드는 응용 프로그램에서 온 HttpRequest를 차단하고 HttpErrorResponse로 돌아갈 때 응답을 컨트롤러에 기록하는 역할을 합니다.HttpHandler는 요청을 수행하는 데 사용됩니다
next.handle
.그리고 응답을 처리하기 위해 파이프를 만듭니다.주:tap은 일종rxjs pipe function으로 파이프의 실제 데이터를 바꾸지 않고 데이터를 검사할 수 있습니다.이러한 상황에서 우리는 HttpErrorResponse를 포착하여 오류가 아닌 HttpResponse가 통과할 수 있도록 합니다.응답을 포착하면 오류 메시지를 확인하고 컨트롤러에 기록할 수 있습니다.이 예에서 HttpResponse에 사용자 정의 주체가 있기를 바랍니다.
단원 테스트
이 단원 테스트에서, 우리는 2xx가 있는 응답이 통과되었는지, 오류 응답이 나왔는지 검사할 것입니다.더 높은 테스트에 대해 시뮬레이션 컨트롤러를 사용할 수 있고, 우리는 컨트롤러를 검사할 수 있다.로그가 호출되었습니다.이것은 본문의 범위를 넘어섰다.
''에서 {HttpErrorInterceptor}/가져오기http 오류.차단기'@ngneat/consident/jest'에서 {createHttpFactory, HttpMethod, considentHttp} 가져오기;'@angular/core/testing'에서 {async} 가져오기;"rxjs"에서 {of,throwError} 가져오기;"@angular/common/http"에서 {HttpErrorResponse, HttpRequest, HttpResponse} 가져오기;설명('HttpErrorInterceptor', ()=>{let consident:considentHTTP
여기서 관건은 1) 시뮬레이션 처리 프로그램과 2) 차단기 응답을 어떻게 테스트하는가이다.
아날로그 HttpHandler
차단기를 테스트할 때, 첫 번째 곤혹스러운 일은 어떻게 HttpHandler를 모의하는가이다.재스민
tap
과 mock
이 제거됐기 때문이다.SpyOn
가 존재하지만 예상대로 작동하지 않습니다.이것은 내가 언급한 그 작은 농담 중의 하나이다.jest.mock
객체가 아닌 에뮬레이션 패키지에 사용됩니다.이 예에서 우리는 HttpHandler 인터페이스와 유사한 대상을 구축하고 예상한 방법을 모의할 것이다.다음은 HttpHandler 인터페이스입니다.보시다시피 그것은 단지 한 가지 방법일 뿐입니다.설명 추상 클래스 내보내기 HttpHandler {abstract handle(req:HttpRequest): 관찰 가능
이것은 비웃음을 당하기 쉽다
const mockHandler={handle:jest.fn (()=>throwError (새 HttpErrorResponse ({status:500, 오류: {message:'오류입니다}}})};
오류가 발생한 경우 HttpErrorResponse를 내보내고 응답체/오류에 대한 사용자 정의 대상을 만드는 방법을 지시합니다.
happy path 사례에서 다음과 같이 시뮬레이션합니다.
const mockHandler={handle:jest.fn(()=>of(new-HttpResponse({status:200}))};
차단기 응답 테스트
기왕 우리가 HttpHandler를 시뮬레이션한 이상, 우리는 실제로 어떻게 차단기를 테스트하여 무엇을 했습니까?여기서 관건은 지정
jest.mock
lambda의 입력입니다.관중서비스차단(새 HttpRequest nownn>(HttpMethod.GET, "/thing"), mockHandler).subscribe((response)=>{expect(response.toBeTruthy();},(오류=>{fail('Expected Successful');
이 예에서, 우리는 차단기가 응답을 정상적으로 전달했는지, 오류가 발생하지 않았는지 검사하고 있다.
시청자와 단원 테스트
어떤 사람들은 코드가 관객
jest.fn()
이 아니라 관객.subscribe
을 사용한다는 것을 알아차릴 수 있다.이런 상황에서 양자의 작업 원리는 완전히 같다.createHttpFactory
를 사용하여 HTTP 재시도를 추가할 예정입니다.또 주의해야 할 것은 이 차단기는 실제로 응답을 수정하지 않아 테스트가 약하다는 것이다.이것은 차단기를 테스트하기 시작하는 기본 프레임워크입니다.
createServiceFactory
를 사용하여 HttpRespond를 수정하는 차단기가 있다면, 아날로그 HttpHandler를 사용하여 입력을 지정하고, 차단기가 호출한subscribe 부분에서 출력을 테스트할 수 있습니다.총결산
관중과 농담을 각도 10과 결합시켜 사용하는 것은 매우 강력한 조합이다.비결은 농담과 관중을 충분히 이해하거나 기존의 예가 있다는 것이다.저는 본고가 시청자와 함께 Jest 테스트 각도 HTTPInterceptor를 어떻게 사용하는지 대충 이해할 수 있기를 바랍니다.여기 열쇠는요.
Reference
이 문제에 관하여(방관자와 우스갯소리로 각도 10의 차단기를 테스트하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ryboflavin42/testing-angular-10-interceptors-with-spectator-and-jest-3f4i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)