typescript 仅使用Karma-Jasmine对服务器发送事件进行Angular单元测试

ehxuflar  于 2023-03-13  发布在  TypeScript
关注(0)|答案(1)|浏览(119)

我使用Angular作为前端,Python作为后端。我使用服务器发送事件(SSE)将数据从服务器流到UI。一切都运行良好,但我无法在angular中为相同的内容编写单元测试。

abc.组件.ts

streamMessages() {
  this.isPaused = false;
  this.messages = [];

  const url = this.urlConfig.stream;

  var eventSource = new EventSource(url);

  eventSource.addEventListener('message', (e) => {
    this.messages.push(e.data);
  });

  eventSource.addEventListener('error', (e) => {
    eventSource.close();

    console.log('ERROR!');

    this.isPaused = true;
  });

  eventSource.addEventListener('close', () => {
    eventSource.close();

    console.log('CLOSED!');
  });
}

abc.组件规格ts

describe('#streamMessages', () => {
  let mockEventSource: jasmine.SpyObj<EventSource>;

  beforeEach(() => {
    mockEventSource = jasmine.createSpyObj('EventSource', ['addEventListener']);
  });

  it('should push new message when new message is received', () => {

    mockEventSource.addEventListener.and.callFake((type: string, event: any) => {
      console.log(type, event)
    });

    component.streamMessages();

    expect(component.messages.length).toBeGreaterThan(0);
  });
});

我需要为所有这三个场景编写单元测试。
任何线索都将是一个很大的帮助。提前感谢!
附言:我不想使用测试台,我需要在噶玛茉莉的帮助下完成这个。

yzuktlbb

yzuktlbb1#

我找到了解决办法。
我改了这一行:

var eventSource = new EventSource(url);

改为:

this.eventSource = new EventSource(url);

并使用eventSourcdispatchEvent方法来发出如下事件:

component.eventSource.dispatchEvent(new Event('error'));

同样,我对其他2个事件也做了同样的操作,并且对它进行了单元测试,同时也覆盖了行。

相关问题