ActivatedRoute의 매개 변수에 의존하는 구성 요소를 단위 테스트하는 방법은 무엇입니까?
개체를 편집하는 데 사용되는 구성 요소를 단위 테스트하고 있습니다. 개체에는 id
서비스에서 호스팅되는 개체 배열에서 특정 개체를 가져 오는 데 사용되는 고유 한 항목 이 있습니다. 특정 항목 id
은 특히 ActivatedRoute
클래스 를 통해 라우팅을 통해 전달되는 매개 변수를 통해 조달됩니다 .
생성자는 다음과 같습니다.
constructor(private _router:Router, private _curRoute:ActivatedRoute, private _session:Session) {
}
ngOnInit() {
this._curRoute.params.subscribe(params => {
this.userId = params['id'];
this.userObj = this._session.allUsers.filter(user => user.id.toString() === this.userId.toString())[0];
이 구성 요소에서 기본 단위 테스트를 실행하고 싶습니다. 그러나 id
매개 변수를 삽입 할 수있는 방법이 확실하지 않으며 구성 요소 에이 매개 변수가 필요 합니다.
그건 그렇고 : 이미 Session
서비스에 대한 모의가 있으므로 걱정할 필요가 없습니다.
이를 수행하는 가장 간단한 방법은 useValue
속성을 사용하고 모의하려는 값의 Observable을 제공하는 것입니다.
{
provide: ActivatedRoute,
useValue: {
params: Observable.of({id: 123})
}
}
나는 이것을하는 방법을 알아 냈다!
ActivatedRoute
서비스 이므로 모의 서비스를 구축 할 수 있습니다. 이것을 모의 서비스라고합시다 MockActivatedRoute
. ActivatedRoute
에서 MockActivatedRoute
다음과 같이 확장 합니다.
class MockActivatedRoute extends ActivatedRoute {
constructor() {
super(null, null, null, null, null);
this.params = Observable.of({id: "5"});
}
라인 super(null, ....)
은 4 개의 필수 매개 변수가있는 수퍼 클래스를 초기화합니다. 그러나이 경우에는 이러한 매개 변수에서 아무것도 필요하지 않으므로 null
값으로 초기화합니다 . 모든 우리의 필요의 값입니다 params
이다 Observable<>
. 따라서를 사용 this.params
하여의 값을 재정의 하고 테스트 대상이 의존하는 매개 변수 params
가되도록 초기화합니다 Observable<>
.
그런 다음 다른 모의 서비스와 마찬가지로 초기화하고 구성 요소의 공급자를 재정의합니다.
행운을 빕니다!
angular 2.0 최신 버전에서 테스트 한 방법은 다음과 같습니다.
import { ActivatedRoute, Data } from '@angular/router';
및 공급자 섹션
{
provide: ActivatedRoute,
useValue: {
data: {
subscribe: (fn: (value: Data) => void) => fn({
yourData: 'yolo'
})
}
}
}
ActivatedRoute의 모의를 추가하면됩니다.
providers: [
{ provide: ActivatedRoute, useClass: MockActivatedRoute }
]
...
class MockActivatedRoute {
// here you can add your mock objects, like snapshot or parent or whatever
// example:
parent = {
snapshot: {data: {title: 'myTitle ' } },
routeConfig: { children: { filter: () => {} } }
};
}
Angular> 5에서 작업하는 일부 사람들의 경우 Observable.of (); 작동하지 않으면 'rxjs'에서 import {of}를 가져 와서 of () 만 사용할 수 있습니다.
'development' 카테고리의 다른 글
ProGuard에 의한 클래스 멤버 이름 난독 화 방지 (0) | 2020.11.14 |
---|---|
명령 줄을 사용하여 텍스트 파일을 더 작은 여러 텍스트 파일로 분할 (0) | 2020.11.14 |
관리되지 않는 DLL이 ASP.NET 서버에서로드되지 않음 (0) | 2020.11.14 |
Lyx 문서에 프로그래밍 코드 삽입 (0) | 2020.11.14 |
최대 요소의 위치 찾기 (0) | 2020.11.14 |