Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 无法在ngOnInit()中测试订阅_Angular_Unit Testing_Jasmine - Fatal编程技术网

Angular 无法在ngOnInit()中测试订阅

Angular 无法在ngOnInit()中测试订阅,angular,unit-testing,jasmine,Angular,Unit Testing,Jasmine,我正在使用Observable进行事件订阅,但无法对其进行测试 这是我的密码 服务 export class EventService<T> { private eventSubject = new Subject<string>(); eventSubject$ = this.eventSubject.asObservable(); dispathEvent(name) { this.eventSubject.next(name)

我正在使用Observable进行事件订阅,但无法对其进行测试

这是我的密码

服务

export class EventService<T> {
    private eventSubject = new Subject<string>();
    eventSubject$ = this.eventSubject.asObservable();

    dispathEvent(name) {
       this.eventSubject.next(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();
      });
规范文件

export class EventService<T> {
    private eventSubject = new Subject<string>();
    eventSubject$ = this.eventSubject.asObservable();

    dispathEvent(name) {
       this.eventSubject.next(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()

要测试subscribe块,可以执行以下操作(未测试的代码):


您需要从具有
subscribe
方法的对象创建一个间谍,在这种情况下,可观察到:

mockEventService = {
  eventSubject: jasmine.createSpyObj('eventSubject', ['next']),
  eventSubject$: jasmine.createSpyObj('eventSubject$', ['subscribe']),
};
在我看来,其余的代码可以保持不变。你可以这样监视它:

expect(mockOvertimeService.eventSubject$['subscribe']).toHaveBeenCalled()

要测试subscribe块,可以执行以下操作(未测试的代码):


现在,我得到的错误是
TypeError:无法读取spec文件中
mockOvertimeService.eventSubject$.and.returnValue(of('string'))中未定义的
的属性'returnValue',
@kartheks如果你在模拟整个东西,为什么要查看返回值:)?您只需使用
toHaveBeenCalled()
检查是否调用了它,我尝试了
toHaveBeenCalled()
但仍然得到了错误,如
error::应该是间谍,但得到了对象({subscribe:spy on widgetActiveSource$.subscribe})。用法:expect()。然后,您不应该使用
createSpyObj
,而是在创建的observableNow上使用createSpy,我得到的错误是
TypeError:undefined
的属性'returnValue',显示在
mockOvertimeService.eventSubject$.and.returnValue(of('string'))
@Kartheek您正在模拟整个事情,为什么要查看返回值:)?您只需使用
toHaveBeenCalled()
检查是否调用了它,我尝试了
toHaveBeenCalled()
但仍然得到了错误,如
error::应该是间谍,但得到了对象({subscribe:spy on widgetActiveSource$.subscribe})。用法:expect()。然后,您不应该使用
createSpyObj
,而是在创建的可观察对象上使用createSpy