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

标签 angular testing jasmine

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

private subject = new Subject<any>();

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

这是我的构造函数

fiscalDocument: FiscalDocumentData;
subscription: Subscription;

constructor(private _myFiscalDocumentsService: MyFiscalDocumentsService) {  
    this.subscription = this._myFiscalDocumentsService.getMessage().subscribe(message => {
      if (message) {
        this.fiscalDocument = message;

      } else {
        this.fiscalDocument = null;
      } 
    });

  }

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

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();
 });

错误消息:预期 spy getMessage 已被调用。 编辑:我得到了 if 条件,现在我正在尝试 else

最佳答案

在构造函数中使用一些复杂的逻辑是不好的做法,请使用 ngOnInit 代替:Difference between Constructor and ngOnInit

关于angular - 测试在构造函数上使用 observable 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58063201/

相关文章:

javascript - 如何在 Jasmine 中正确使用 mock-ajax 库

Angular - 样式未从父级应用到我的自定义组件

angular - rxjs 管道运算符之后的 HttpInterceptor

testing - 像 dispatch_async 这样的代码的单元测试。

android - 无法从命令行运行android ui测试

javascript - 使模块在 jasmine 通过 Resharper 测试的 Controller 中可用

javascript - Marionette onAttach 生命周期在测试期间未触发

javascript - PrimeNg 编辑器未显示 - Angular

angular - 如何使用 angular-CLI 在控制台中显示日志

database - 您应该在使用外部系统之前对其进行测试吗?