Tengo el siguiente servidor Fastify básico:
import Fastify from 'fastify'; import expressPlugin from 'fastify-express'; import cors from 'cors'; async function build() { const fastify = Fastify(); await fastify.register(expressPlugin); fastify.use(cors()); fastify.post( '/someurl', async (request, reply) => { console.log('PATATAPATATA'); void reply.send({message: "Hey, I'm stuck :D"}) } ); return fastify; }Y luego tengo la siguiente prueba:
it.only('Should reply with a 200 status code when sending a string body', async () => { // after this line, jest gives a timeout (5000 ms) const response = await getResponse({ headers: { Accept: 'application/json', 'Content-Type': 'text/plain', 'Content-Length': 1, }, payload: 'a', }); expect(response.statusCode).toEqual(200); }); async function getResponse(options?: InjectOptions) { const app = await build(); return app.inject({ method: 'POST', url: `/someurl`, ...options, }); }El encabezado de longitud de contenido no debería ser necesario, pero lo agregué después de probar diferentes cosas para solucionarlo. Si lo elimina, obtiene el tiempo de espera de todos modos. ¿Alguna idea de por qué sucede esto? Si elimino el encabezado de tipo de contenido, obtengo un error de http 415.
Nota al margen: el código console.log('PATATAPATATA'); nunca se ejecuta, por lo que el problema tiene que estar en algunos componentes internos de fastify o en el módulo light my request.
Actualizar Parece que esto solo sucede cuando uso la payload en las opciones de inject , así:
async function getResponse(options?: InjectOptions) { const app = await build(); return app.inject({ method: 'POST', url: `/someurl`, payload: {}, }); }También he descubierto que:
payload: '' funciona.payload: '{}' no funciona. No da un tiempo de espera, pero tampoco ejecuta el método de post .payload: '{}' y content-type establecido en application/json o text/plain , también proporciona el tiempo de espera.Parece fastify-express no es compatible con inject -> https://github.com/fastify/fastify/issues/3739