角度-单元测试Subject()?

时间:2018-08-30 07:54:58

标签: javascript angular typescript testing karma-runner

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

我看到了[this thread] [1],但并没有发现它有很大帮助。

我曾尝试嘲笑next(),但我迷失了不少。

2 个答案:

答案 0 :(得分:3)

您应该监视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);
});

答案 1 :(得分:-1)

首先,您可以只订阅Subject并在其中期望一些值,然后执行该方法即可发出该值:

it('should catch what is emitted', () => {
    service.serviceMsg.subscribe(msg => {
        expect(msg).toEqual(something);
    });
    service.confirm(value); // this should match what you expect above
});