如何在消息上使用socket.io对Jest + rxjs进行单元测试

时间:2020-06-03 09:45:38

标签: socket.io rxjs jestjs

我正在尝试测试侦听套接字并发布消息的类 我需要模拟socket.io吗?如果是,我该怎么办? 如何测试“打开”功能

我的课,我想测试:

export class DataObservableService {
  public observable$: Observable<fata[]>;

  private subject$: Subject<data[]>;

  constructor(
    private socketService: ISocketIo,
  ) {
    this.subject$ = new Subject<data[]>();
    this.observable$ = this.subject$.asObservable();
  }

  async init(): Promise<void> {
    const server = await this.socketService.getSocket();

    server.on('data', (val: data[]) => {
      this.subject$.next(val);
    });
  }
}

套接字连接功能

  async connect(): Promise<SocketIOClient.Socket> {
    this.server = io('/'});
    this.resolveServer(this.server);
    return this.server;
  }

测试我有三叉戟,它不起作用

使用套接字模拟

  const fakeURL = 'ws://localhost:8080';
  const mockServer = new Server(fakeURL);
  window.io = SocketIO;

      mockServer.on('connection', socket => {
        socket.on('message', (data: any) => {
          socket.emit('data', 'string');
         console.log('emittttt')
        });
      });
  window.io.connect(fakeURL);

其中:

  socket =  mockServe. // mock server from above
  socketMock.getSocket = jest.fn(() => Promise.resolve(socket));   mock the function that return socket then server.on will work (but i gess no)

    dataObservable.observable$.subscribe(value => {
        console.log(value); // not working
        expect(value).toBeDefined();
      });

也尝试过这个:

 await new Promise((resolve, reject) => {
        dataService.observable$.subscribe(value => {
            resolve(value);
          });
      });

得到了

    : Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error:

0 个答案:

没有答案