我正在学习角,我想要做的测试,但我坚持。我有一个函数:
ngOnInit(): void {
this.route.paramMap
.switchMap((params: ParamMap) =>
this.SomethingService.getSomething(params.get('id')))
.subscribe(something => {
this.something = something;
this.doSomethingElse();
});
}
哪里
route: ActivatedRoute
我要测试,但我不知道如何嘲笑ActivatedRoute
一个简单的方法来模拟ActivatedRoute是这个:
TestBed.configureTestingModule({
declarations: [YourComponenToTest],
providers: [
{
provide: ActivatedRoute,
useValue: {
params: Observable.from([{id: 1}]),
},
},
]
});
然后在您的测试将可以和你的功能应该有这方面的工作(至少是部分ActivatedRoute)
如果你想它的股票在一个变量,你可以在你的qazxsw POI功能qazxsw POI得到它。
不要忘了从TestBed.get(ActivatedRoute)
导入观察到的,不是从it
任何有兴趣如何正确地拥有多个物业这样做,这是你定义你的模拟类方式:
rxjs/Rx
这样,您就可以订阅您rxjs/Observable
和检索多个值 - 在这种情况下import { convertToParamMap } from '@angular/router';
import { Observable } from 'rxjs/Observable';
export class ActivatedRouteMock {
public paramMap = Observable.of(convertToParamMap({
testId: 'abc123',
anotherId: 'd31e8b48-7309-4c83-9884-4142efdf7271',
}));
}
和paramMap
。
我正面临着使用,而不是PARAMS paramMap同样的问题。这引起了它的工作对我来说,至少在最简单的情况:
testId
修改上述安德鲁斯的回答。 。 。
对于RxJS 6+:
anotherId
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import { ComponentToTest } from './component-to-test.component';
import { ActivatedRoute } from '@angular/router';
TestBed.configureTestingModule({
declarations: [ComponentToTest],
providers: [
{
provide: ActivatedRoute,
useValue: {
paramMap: Observable.of({ get: (key) => 'value' })
}
}
]
});
就我而言,我不得不创建一个新的类来处理这种类型的测试,这个类可以让你处理快照,queryParams,而params。
import { convertToParamMap } from '@angular/router';
import { of } from 'rxjs';
export class ActivatedRouteMock {
public paramMap = of(convertToParamMap({
testId: 'abc123',
anotherId: 'd31e8b48-7309-4c83-9884-4142efdf7271',
}));
}
这是测试应该如何看
https://www.learnrxjs.io/operators/creation/of.html
import { Params } from '@angular/router';
import { BehaviorSubject } from 'rxjs';
export class MockActivatedRoute {
private innerTestParams?: any;
private subject?: BehaviorSubject<any> = new BehaviorSubject(this.testParams);
params = this.subject.asObservable();
queryParams = this.subject.asObservable();
constructor(params?: Params) {
if (params) {
this.testParams = params;
} else {
this.testParams = {};
}
}
get testParams() {
return this.innerTestParams;
}
set testParams(params: {}) {
this.innerTestParams = params;
this.subject.next(params);
}
get snapshot() {
return { params: this.testParams, queryParams: this.testParams };
}
}