使用socket.io实体模型对Angular 5进行单元测试

使用socket.io实体模型对Angular 5进行单元测试,angular,typescript,unit-testing,socket.io,jasmine,Angular,Typescript,Unit Testing,Socket.io,Jasmine,我正在尝试对使用导入的服务进行单元测试。我研究了类似的问题,比如一个,但我不能让它和下面的问题一起工作 import { TestBed, inject, async } from '@angular/core/testing'; import { SocketIO, Server } from 'mock-socket'; import { BackendService } from './backend.service'; describe('BackendService', () =

我正在尝试对使用导入的服务进行单元测试。我研究了类似的问题,比如一个,但我不能让它和下面的问题一起工作

import { TestBed, inject, async } from '@angular/core/testing';
import { SocketIO, Server } from 'mock-socket';
import { BackendService } from './backend.service';

  describe('BackendService', () => {

  /* setup for mock-socket in order to test socket.io */
  const SERVER_URL = window.location.host;
  const mockServer = new Server(SERVER_URL);

  // setting up server mock
  mockServer.on('connection', socket => {
    mockServer.emit('server-message', 'test message 1');
  });

  beforeEach(() => {

    TestBed.configureTestingModule({
        imports: [ ],
        providers: [ BackendService ]
    });

    jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;

  });

  it('tests simple connection and messaging works with mock-socket setup', async(inject([BackendService], (service: BackendService) => {

  (window as any).io = SocketIO;  

  // setting up client
  service.socket = io(window.location.host);

  setTimeout(() => {
      service.socket.on('connect', (message) => {
          expect(message).toEqual('test message 1');
          mockServer.stop();
      });  
  }, 100);

  })));

});
有人来过这里吗


我已经创建了一个脚本来重新创建场景,如果它使事情更容易理解的话。

我通过更改为以下行解决了我的问题:

  it('tests simple connection and messaging with mock-socket setup', async(done: DoneFn) => {

  (window as any).io = SocketIO;  

  // setting up client
  backendService.socket = io(window.location.host);


  backendService.socket.on('server-message', (message) => {
    console.log(message)
    expect(message.message).toEqual('test message 1');
    mockServer.stop();
    done();
  });  

  });

});
问题本身是因为你需要在手术完成后通知Jasmine


这是一个工作模式,以查看测试工作。

我通过更改为以下行解决了问题:

  it('tests simple connection and messaging with mock-socket setup', async(done: DoneFn) => {

  (window as any).io = SocketIO;  

  // setting up client
  backendService.socket = io(window.location.host);


  backendService.socket.on('server-message', (message) => {
    console.log(message)
    expect(message.message).toEqual('test message 1');
    mockServer.stop();
    done();
  });  

  });

});
问题本身是因为你需要在手术完成后通知Jasmine

这是一个可以看到测试工作的工作