首页 > 解决方案 > Angular - 单元测试主题()?

问题描述

我有一个仅使用主题的 Angular 服务,但我不确定如何为其编写单元测试。

我看到了 [this thread][1],但我没有发现它非常有帮助。

我试图嘲笑next(),但我有点迷失了。

标签: javascriptangulartypescripttestingkarma-runner

解决方案


你应该监视service.serviceMsg而不是监视service,因为next()方法似乎是serviceMsg主题。

it('should catch what is emitted', () => {
    const nextSpy = spyOn(service.serviceMsg, 'next');
    service.confirm(ACTION);
    expect(nextSpy).toHaveBeenCalled();
});

编辑 :

您还应该更改创建service实例的方式。您在代码中显示的内容仅适用于component实例创建

beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [MessageService]
    });
    service = TestBed.get(MessageService); // get service instance
    httpMock = TestBed.get(HttpTestingController);
});

推荐阅读