Можете ли вы заставить Supertest дождаться окончания работы обработчика Express? - PullRequest
0 голосов
/ 03 июля 2018

Я использую Supertest для тестирования своих приложений Express, но я сталкиваюсь с проблемой, когда хочу, чтобы мои обработчики выполняли асинхронную обработку после отправки запроса. Возьмите этот код, например:

const request = require('supertest');
const express = require('express');

const app = express();

app.get('/user', async (req, res) => {
  res.status(200).json({ success: true });
  await someAsyncTaskThatHappensAfterTheResponse();
});

describe('A Simple Test', () => {
  it('should get a valid response', () => {
    return request(app)
      .get('/user')
      .expect(200)
      .then(response => {
          // Test stuff here.
      });
  });
});

Если при вызове someAsyncTaskThatHappensAfterTheResponse() выдается ошибка, то в данном тесте выполняется условие гонки, при котором он может или не может быть неудачным на основании этой ошибки. Даже помимо обработки ошибок, также сложно проверить наличие побочных эффектов, если они возникают после установки ответа. Представьте, что вы хотите запускать обновления базы данных после отправки ответа. Вы не сможете определить из своего теста, когда следует ожидать, что обновления будут полностью. Есть ли способ использовать Supertest для ожидания завершения выполнения функции обработчика?

...