无法在 ngOnInit() 中测试订阅
unable to test subscribe in ngOnInit()
我正在使用 Observable 进行事件订阅,但我无法对其进行测试
这是我的代码
服务
export class EventService<T> {
private eventSubject = new Subject<string>();
eventSubject$ = this.eventSubject.asObservable();
dispathEvent(name) {
this.eventSubject.next(name);
}
}
组件
export class UserComponent implements OnInit{
getSub: Subscription;
constructor(private service EventService, private otherService OtherServece)(){}
ngOnInt(){
this.getSub = this.service.eventSubject$.subscribe(name =>{
this.otherService.performAction();
this.otherService.setVar = name;
})
}
}
规格文件
let mockEventService :any;
mockEventService = {
eventSubject: jasmine.createSpyObj('eventSubject', ['next']),
eventSubject$: jasmine.createSpyObj('eventSubject$', ['subscribe']),
};
//some code
providers: [{ provide: EventService, useValue: mockEventService }]
// some code
fixture = TestBed.createComponent(UserComponent);
component = new TeamOvertimeComponent(mockEventService ,mockOtherService);
....
it('should test ngOnInt Service var status', () => {
expect(mockEventService.eventSubject$['subscribe']).toHaveBeenCalled()
fixture.detectChanges();
//
component.ngOnInit();
});
我看到的问题是
TypeError: this.service.eventSubject$.subscribe is not a function
我试着把它们放在每个之前,但问题仍然存在
您需要从具有 subscribe
方法的对象创建一个间谍,在本例中是可观察对象:
mockEventService = {
eventSubject: jasmine.createSpyObj('eventSubject', ['next']),
eventSubject$: jasmine.createSpyObj('eventSubject$', ['subscribe']),
};
其余代码你可以保持不变,据我所知。你可以像这样监视它:
expect(mockOvertimeService.eventSubject$['subscribe']).toHaveBeenCalled()
要测试订阅块,您可以这样做(未经测试的代码):
mockEventService = {
eventSubject$: { subscribe: jasmine.createSpy().and.callFake((cb) => cb('test')) }
};
otherService = {
performAction: jasmine.createSpy()
};
fixture.detectChanges();
expect(mockEventService.eventSubject$['subscribe']).toHaveBeenCalled();
expect(otherService.performAction).toHaveBeenCalled();
expect(otherService.setVar).toBe('test');
我正在使用 Observable 进行事件订阅,但我无法对其进行测试
这是我的代码
服务
export class EventService<T> {
private eventSubject = new Subject<string>();
eventSubject$ = this.eventSubject.asObservable();
dispathEvent(name) {
this.eventSubject.next(name);
}
}
组件
export class UserComponent implements OnInit{
getSub: Subscription;
constructor(private service EventService, private otherService OtherServece)(){}
ngOnInt(){
this.getSub = this.service.eventSubject$.subscribe(name =>{
this.otherService.performAction();
this.otherService.setVar = name;
})
}
}
规格文件
let mockEventService :any;
mockEventService = {
eventSubject: jasmine.createSpyObj('eventSubject', ['next']),
eventSubject$: jasmine.createSpyObj('eventSubject$', ['subscribe']),
};
//some code
providers: [{ provide: EventService, useValue: mockEventService }]
// some code
fixture = TestBed.createComponent(UserComponent);
component = new TeamOvertimeComponent(mockEventService ,mockOtherService);
....
it('should test ngOnInt Service var status', () => {
expect(mockEventService.eventSubject$['subscribe']).toHaveBeenCalled()
fixture.detectChanges();
//
component.ngOnInit();
});
我看到的问题是
TypeError: this.service.eventSubject$.subscribe is not a function
我试着把它们放在每个之前,但问题仍然存在
您需要从具有 subscribe
方法的对象创建一个间谍,在本例中是可观察对象:
mockEventService = {
eventSubject: jasmine.createSpyObj('eventSubject', ['next']),
eventSubject$: jasmine.createSpyObj('eventSubject$', ['subscribe']),
};
其余代码你可以保持不变,据我所知。你可以像这样监视它:
expect(mockOvertimeService.eventSubject$['subscribe']).toHaveBeenCalled()
要测试订阅块,您可以这样做(未经测试的代码):
mockEventService = {
eventSubject$: { subscribe: jasmine.createSpy().and.callFake((cb) => cb('test')) }
};
otherService = {
performAction: jasmine.createSpy()
};
fixture.detectChanges();
expect(mockEventService.eventSubject$['subscribe']).toHaveBeenCalled();
expect(otherService.performAction).toHaveBeenCalled();
expect(otherService.setVar).toBe('test');