es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mis solicitudes HTTP en node.js fallan cuando mi servidor es inicializado por mi suite de pruebas?

He estado intentando escribir un conjunto de pruebas para mi proyecto de API de node.js y uno de sus requisitos es controlar cuándo comienza y detiene el servidor. Para eso, escribí este código a continuación con dos funciones: initializeWebServer y stopWebServer.

express.js

const initializeWebServer = () => {
return new Promise((resolve, reject) => {
app = express();

/* algunos middlewares */

app.use('/', userRoutes);

httpServer = http.createServer(app);

httpServer.listen(3000, (err) => {
  if (err) {
    reject(err);
    return;
  }

  resolve(app);
});

});
};

const stopWebServer = () => {
return new Promise((resolve, reject) => {
httpServer.close(() => { resolve(); });
});
};

Usando mocha para ejecutar mis pruebas, elegí gestionar mi conexión de servidor con hooks antes y después, usando la sintaxis async/await.

user.spec.js

let axiosAPIClient;

before(async () => {
await initializeWebServer();
const axiosConfig = {
baseURL: `http://localhost:3000`,
validateStatus: () => true
};
axiosAPIClient = axios.create(axiosConfig);
});

after(async () => {
await stopWebServer();
});

describe(‘POST /api/user’, () => {
it(‘cuando se agrega un nuevo usuario, se debe recibir el aprobación con una respuesta 200’, async () => {
const userData = {
/* propiedades de usuario */
};

const response = await axiosAPIClient.post(‘/api/user’, userData);

expect(response).to.containSubset({
status: 200,
data: { message: ‘Usuario registrado.’ }
});

Cuando axios (intenté fetch también) envía cualquier solicitud HTTP, mocha devuelve el siguiente error: Error: el tiempo de espera de 2000ms se ha superado. Para pruebas y ganchos asíncronos, asegúrese de que se llame a “done()”; si devuelve una Promesa, asegúrese de que se resuelva. Intenté aumentar el intervalo de tiempo de espera, pero no funcionó.

Si ejecuto mi conjunto de pruebas sin ganchos, inicializando mi servidor con nodemon apuntando a mi archivo de índice con el mismo await initializeWebServer(), las solicitudes HTTP funcionan como deberían.

Realmente no entiendo por qué está sucediendo esto, creo que es algo con mocha.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo un problema con tu conjunto de pruebas al usar mocha para ejecutar tus pruebas. Has escrito dos funciones, initializeWebServer y stopWebServer, para controlar cuándo se inicia y se detiene el servidor. Estás usando ganchos before y after con la sintaxis async/await para gestionar la conexión del servidor. Cuando axios (o fetch) envía cualquier solicitud HTTP, mocha devuelve un error. Has intentado aumentar el intervalo de tiempo de espera, pero no ha funcionado.

    Si ejecutas tu conjunto de pruebas sin ganchos, inicializando tu servidor con nodemon apuntando a tu archivo de índice con el mismo await initializeWebServer();, las solicitudes HTTP funcionan como se espera. Parece que el problema está relacionado con mocha.

Comments are closed.