Hice una aplicación express que es básicamente un RESTAPI y escribí pruebas en mocha para la aplicación. Ahora quería probar la mutación de mi aplicación, pero me encontré con un problema. Mi aplicación escucha el puerto 8000 a través del comando app.listen(8000) de express y mis pruebas prueban la aplicación a través de las rutas que configuré (por ejemplo, localhost:8000/test). El problema que tengo cuando trato de probar la mutación con stryker es que cada mutante creado intenta acceder al puerto 8000 al mismo tiempo durante la prueba y los mutantes mueren debido a "EADDRINUSE: dirección ya en uso :::8000", lo que da como resultado Puntuación de mutación del 100 %. Ya intenté editar el script de prueba de "mocha" a "mocha --exit" en package.json, así como cerrar el servidor después de que finaliza la última prueba.
Creo que el error podría reproducirse fácilmente al hacer una API simple con express, luego escribir pruebas que usen las rutas e intentar probar la mutación con stryker. ¿Hay alguna solución para este problema, cualquier ayuda es bienvenida!
También hay una opción en Stryker para tener las pruebas concurrentes (simultaneidad) que puede configurar en 1, para que el motor de prueba solo ejecute 1 prueba a la vez. Esto será lento para la prueba, pero debería funcionar.
Estoy usando NestJS para el marco de mi aplicación API con Express. Desde allí, puedo iniciar la aplicación internamente, utilizando el módulo de prueba de NestJS. ¿Tienes algo parecido?
En mi caso, puedo iniciar la aplicación de forma aislada en los métodos beforeAll() y luego ejecutar pruebas.
beforeAll(async () => { const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }).compile(); app = moduleFixture.createNestApplication(); await app.init(); }); ... it('/bad (GET) address should be Not Found', async () => { const ResponseData$ = await request(app.getHttpServer()).get('/bad'); expect(ResponseData$.body.statusCode).toBe(404); expect(ResponseData$.body.message).toBe('Cannot GET /bad'); });Esta es una prueba simple, pero app.getHttpServer() es la clave que inicia una llamada interna en mi prueba, sin necesidad de que la aplicación se ejecute en el puerto, ya que el módulo de prueba lo admite.
Esto me permite ejecutar todas mis pruebas con ejecución paralela y también permite que Stryker se ejecute en paralelo.