微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在其他服务角度单元测试中订阅 EventEmmiter

如何解决在其他服务角度单元测试中订阅 EventEmmiter

我尝试在角度服务中测试 EventEmitter 是否正确调用。但是我有两个服务。

服务一

public methodToTestInServiceOne(message: string) {
  this.serviceTwo.methodInServiceTwo(message);
}

服务二

public onMessageStart = new EventEmitter();
public onMessageEnd = new EventEmitter();

public methodInServiceTwo(message: string): void {
    this.onMessageStart.emit(message);
    /* Code... */
    this.onMessageEnd.emit(message);
  }

单元测试服务一

describe("serviceOne",(): void => {
  let serviceOne: ServiceOne;
  let serviceTwo: ServiceTwo;

  beforeEach((): void => {
    Testbed.configureTestingModule({ providers: [] });
    service = Testbed.inject(ServiceOne);
    serviceTwo = Testbed.inject(ServiceTwo);
  });

  describe("methodToTestInServiceOne",(): void => {
    it("should call Eventemmiter",(): void => {
      let isMessageSend: boolean = false;

      serviceTwo.onMessageEnd.subscribe((message: string): void => {
        isMessageSend = true;
      });

      serviceOne.methodToTestInServiceOne("Hello World !");

      expect(isMessageSend).toBeTruthy();
    });
  });
});

这段代码不起作用,但如果我直接调用我的服务二。

serviceTwo.methodInServiceTwo("Hello World !")

测试成功! 请问,我如何测试我的 EventEmitter 调用 serviceOne ?

解决方法

尝试将 ServiceOneServiceTwo 放入 providersTestBed 数组中。

试试这个:

describe("serviceOne",(): void => {
  let serviceOne: ServiceOne;
  let serviceTwo: ServiceTwo;

  beforeEach((): void => {
    TestBed.configureTestingModule({ 
      providers: [
        ServiceOne,ServiceTwo,// !! - Add these two here - !!
      ] 
    });
    service = TestBed.inject(ServiceOne);
    serviceTwo = TestBed.inject(ServiceTwo);
  });

  describe("methodToTestInServiceOne",(done): void => { // !! add done here
    it("should call EventEmmiter",(): void => {
      let isMessageSend: boolean = false;

      serviceTwo.onMessageEnd.subscribe((message: string): void => {
        console.log(`1.) subscribing to message,${message}`);
        console.log(`2.) Setting isMessageSend to true`);
        isMessageSend = true;
        done(); // !! call done to let Jasmine know we are done with the test
      });

      serviceOne.methodToTestInServiceOne("Hello World !");
      console.log(`3.) Checking isMessageSend is truthy`);
      expect(isMessageSend).toBeTruthy();
    });
  });
});
public methodToTestInServiceOne(message: string) {
  console.log('[Service One] calling method in service two');
  this.serviceTwo.methodInServiceTwo(message);
}
....
public methodInServiceTwo(message: string): void {
    this.onMessageStart.emit(message);
    /* Code... */
    console.log('[Service Two] onMessageEnd being emitted');
    this.onMessageEnd.emit(message);
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。