Estoy escribiendo pruebas de integración para las rutas API en una aplicación Next.js y me pregunto si hay algún problema al colocar el archivo index.test.ts en el directorio /pages . Prefiero que la prueba esté lo más cerca posible del archivo en lugar de tener que mapear la estructura del proyecto dentro del directorio __test__ .
./pages/api/path/index.ts
handler.get(async (req: NextApiRequest, res: NextApiResponse) => { ... }); export default handler; ./pages/api/path/index.test.ts
import { testClient } from "__test__/utils/testClient"; describe("Testing API POST: /api", () => { test("Should return 401 when not authenticated", async () => { const request = testClient({ handler }); const res = await request.post("/api/applications"); expect(res.status).toEqual(401); }); });De forma predeterminada, Next.js tendrá en cuenta cualquier archivo que termine con tsx , ts , jsx o js en la carpeta de pages con el fin de crear rutas y enrutamiento de páginas/API.
De la documentación de Extensiones de página personalizadas :
Next.js asume que cada archivo tsx/ts/jsx/js en el directorio de
pageses una página o ruta API, y puede exponer rutas no deseadas vulnerables a ataques de denegación de servicio, o arrojar un error como el siguiente al compilar el paquete de producción
Agregar un archivo llamado index.test.ts en la carpeta de pages (o cualquier subcarpeta) incluirá ese archivo como una página real y podría generar errores durante el tiempo de compilación.
Puede eludir esto modificando las extensiones que Next.js espera mediante la propiedad pageExtensions en next.config.js .
module.exports = { // Default value is ['tsx', 'ts', 'jsx', 'js'] pageExtensions: ['page.tsx', 'page.ts', 'page.jsx', 'page.js'] } Con esta configuración, solo se tendrán en cuenta las páginas con las extensiones anteriores. Por lo tanto, podría tener la siguiente estructura de carpetas de pages , con archivos de prueba ubicados en el mismo lugar.
pages/ ├─ api/ │ ├─ path.page.ts │ └─ path.test.ts ├─ _app.page.ts ├─ _document.page.ts ├─ index.page.ts └─ index.test.ts Se ignorarían tanto path.test.ts como index.test.ts .