модульное тестирование Angular 5 с socket.io макетом - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь выполнить юнит-тестирование сервиса, в котором socket.io импортирован с использованием mock-socket . Я посмотрел на похожую проблему, такую ​​как this one, и у меня не получается заставить ее работать со следующими.

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);

  })));

});

Кто-нибудь с этим сталкивался?

Я создал Stackblitz , чтобы воссоздать сценарий, если за ним легче следовать.

1 Ответ

0 голосов
/ 05 августа 2018

Я решил свою проблему, изменив следующие строки:

  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, когда выполняется асинхронная операция.

Это рабочий стек , чтобы увидеть, как тест работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...