Angular 测试在构造函数上使用observable的方法

Angular 测试在构造函数上使用observable的方法,angular,testing,jasmine,Angular,Testing,Jasmine,我需要在我的代码中用Jasmine覆盖这个方法 private subject = new Subject<any>(); getMessage(): Observable<any> { return this.subject.asObservable(); } 我已经在测试中尝试过这样做,我有TestBed.configuretestingmodule,但我不会在这里发布,因为我相信这是我的问题所在 let dummyOb: Observable<

我需要在我的代码中用Jasmine覆盖这个方法

private subject = new Subject<any>();

getMessage(): Observable<any> {
    return this.subject.asObservable();
  }

我已经在测试中尝试过这样做,我有TestBed.configuretestingmodule,但我不会在这里发布,因为我相信这是我的问题所在

let dummyOb: Observable<any>;

  beforeEach(() => {
    service = TestBed.get(MyFiscalDocumentsService);
    fixture = TestBed.createComponent(MyFiscalDocumentsDetailsComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
});

it('should getMessage', async () => {
    let generalSpy = spyOn(service, 'getMessage' ).and.returnValue(await Promise.resolve(dummyOb));
    expect(generalSpy).toHaveBeenCalled();
 });
let dummyOb:可观察;
在每个之前(()=>{
服务=TestBed.get(MyFiscalDocumentsService);
fixture=TestBed.createComponent(MyFiscalDocumentsDetailsComponent);
组件=fixture.componentInstance;
fixture.detectChanges();
});
它('should getMessage',async()=>{
让generalSpy=spyOn(服务,'getMessage')。和.returnValue(等待Promise.resolve(dummyOb));
expect(generalSpy).tohavebeencall();
});
错误消息:预期已调用spy getMessage。
编辑:我得到了if条件,现在我正在尝试else

在构造函数中使用一些复杂的逻辑是不好的做法,请改用ngOnInit:

当您创建间谍时,您的构造函数已经在每个之前的
中被调用了。
试试这个:

let dummyOb:可观察;
它('should getMessage',async()=>{
让generalSpy=spyOn(服务,'getMessage')。和.returnValue(等待Promise.resolve(dummyOb));
新MyFiscalDocumentsDetailsComponent(服务);
expect(generalSpy).tohavebeencall();
});

我以这种方式解决了问题,不需要if-else条件

组成部分

ngOnInit() {
this.subscription = this._myFiscalDocumentsService.getMessage().subscribe(message => {
  this.fiscalDocument = message;
});
规格


}))

我只是在做布局,这就是为什么我使用构造函数只是为了显示屏幕功能,感谢对构造函数和Ngoninithanks之间差异的帮助,在这一刻,我以这种方式得到了一个解决方案
it('should getMessage',async()=>{let spy=spyOn(service,'getMessage')。和.callThrough();component.ngOnInit();expect(spy).toHaveBeenCalled();})现在我正在尝试解决else条件
ngOnInit() {
this.subscription = this._myFiscalDocumentsService.getMessage().subscribe(message => {
  this.fiscalDocument = message;
});
it('should getMessage', async () => {
service.subject.next(dummyMock)
const spy = spyOn(service, 'getMessage').and.returnValue(of(dummyMock));
component.ngOnInit();
expect(component.subscription).toBeDefined();
expect(spy).toHaveBeenCalled();