我有一个组件从服务中消耗资源。
export class BarService {
age: string = '';
private dare$ = new BehaviorSubject<boolean>(false);
delete() {
throw new Error('Delete');
}
dare = this.dare$.asObservable();
setDare(flag: boolean) {
this.dare$.next(flag);
}
getVision() {
//some http call
return of({ name: 'Andrew' });
}
//some http call
getVisions = of({ name: 'ion' });
}
在组件中什么消费了这个服务。
...
ngOnInit() {
this._bar.getVisions
.pipe(
switchMap(() => this._bar.getVision()),
tap((value: any) => (this.dare = value.name)),
catchError((err) => {
this.error = true;
console.log(err);
return EMPTY;
})
)
.subscribe(console.log);
}
...
在我的测试中
beforeEach(() => {
barService = jasmine.createSpyObj(
'BarService',
{
getVision: of('Ion'),
},
{
getVisions: getError(),
age: '41',
dare: of({}),
}
);
TestBed.configureTestingModule({
declarations: [BarComponent],
providers: [
...
{ provide: BarService, useValue: barService },
],
}).compileComponents();
fixture = TestBed.createComponent(BarComponent);
component = fixture.componentInstance;
});
在这里你会找到一个在 stackblitz 中创建的基准
如何在不同的 IT 中将这 2 个可观察对象的状态更改 3 次。我设法改变了它们,但问题是我无法找到我发现的一致性:有时它以一种方式工作,有时它以不同的方式工作。请帮助那些对茉莉花有更多经验的人:-)
您的
stackblitz
链接似乎已损坏。
要更改可观察值的值,我会使用
BehaviorSubject
。像这样的东西:
let barService: BarService;
// Declare behavior subjects
getVisionSubject = new BehaviorSubject<string>('Ion');
dareSubject = new BehaviorSubject<any>({});
...
// Assign behavior subjects to the spies
beforeEach(() => {
barService = jasmine.createSpyObj(
'BarService',
{
getVision: getVisionSubject.asObservable(),
},
{
getVisions: getError(),
age: '41',
dare: dareSubject.asObservable(),
}
);
...
// change them in tests
it('abc', () => {
getVisionSubject.next('blah');
dareSubject.next({ a: 1 });
...
});
it('def', () => {
getVisionSubject.next('yada');
dareSubject.next({ b: 2 });
...
});