Jest-тестирование socket.io-клиента противоречивые результаты - PullRequest
0 голосов
/ 24 февраля 2019

Я пишу несколько сквозных тестов для проверки соединений с сокетами в моем приложении.Я ожидаю получения событий сокета после определенных запросов API остальных.Например, после нажатия: /api/v1/[createTag] я ожидаю получения события createTag с помощью socket.io-client.Проблема в том, что он очень непостоянно, а иногда и терпит неудачу, с хорошими запросами API покоя.Причина сбоя в том, что событие done () внутри socket.on('createTag' ... никогда не вызывается, поэтому оно получает тайм-аут.В браузере в настоящее время все конечные точки и сокеты API работают нормально.Есть ли какая-то конкретная конфигурация, которую я мог бы пропустить, чтобы протестировать socket.io-client в среде Node.js и Jest?

Ниже приведены мои тесты и большое спасибо заранее:

describe('Socket integration tests: ', () => {

  beforeAll(async done => {

    await apiInit();

    const result = await requests.userSignIn(TEST_MAIL, TEST_PASSWORD);

    TEST_USER = result.user;
    SESSION = result.user.session;

    console.log('Test user authenticated succesfully.');

    done();

  });

  beforeEach(done => {

    socket = io(config.socket_host, { forceNew: true })

    socket.on('connect', () => {
      console.log('Socket connection succesful.');

      socket.emit('session', { data: SESSION }, (r) => {
        console.log('Socket session successful.');
        done();
      });

    });

  })

  test('Receiving createTag socket event?', async(done) => {

    console.log('API request on createTag');
    const response = await Requester.post(...);
    console.log('API response on createTag', response);

    socket.on('createTag', result => {

      console.log('createTag socket event succesful.');
      createdTagXid = result.data.xid;

      done();

    })

  });

  afterEach(done => {

    if(socket.connected) {
      console.log('disconnecting.');
      socket.disconnect();
    } else {
      console.log('no connection to break');
    }

    done();

  })

}

1 Ответ

0 голосов
/ 24 февраля 2019

По сути, проблема заключается в установке дескрипторов событий после асинхронных вызовов API.Поэтому я должен был сначала установить socket.on( ..., а затем вызвать rest API.

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