IIC2513-2021-1 / projects

Repositorio oficial para los proyectos de ambas secciones del periodo 2021-1 del curso PUC IIC2513
14 stars 6 forks source link

Error con test de endpoints #123

Open milosoria opened 3 years ago

milosoria commented 3 years ago

Hola! Estamos teniendo problemas con el testing de endpoints. image El único test que tenemos, a pesar de ser saltado (skip), genera problemas, así que suponemos que es debido a supertest. El error es el siguiente: image A diferencia de la issue relacionada al problema #97, todas las rutas están en el formato correcto y el servicio de psql está corriendo, además creamos la bdd de testing requerida. Cualquier ayuda, se agradece!

milosoria commented 3 years ago

Probamos eliminando las líneas de supertest y aún así, el problema persiste. Parece ser el require de la app...

sivicencio commented 3 years ago

¿Qué te aparece al hacer console.log antes del describe.skip y correr los tests?

const app = require('../../app');

const request = supertest(app.callback());

console.log(app);
console.log(request);

En una ejecución exitosa debieses ver algo como lo siguiente:

yarn test
yarn run v1.22.4
$ jest --runInBand --verbose
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
  console.log
    { subdomainOffset: 2, proxy: false, env: 'test' }

      at Object.<anonymous> (src/routes/api/authors.test.js:7:9)

  console.log
    {
      acl: [Function],
      bind: [Function],
      checkout: [Function],
      connect: [Function],
      copy: [Function],
      delete: [Function],
      get: [Function],
      head: [Function],
      link: [Function],
      lock: [Function],
      'm-search': [Function],
      merge: [Function],
      mkactivity: [Function],
      mkcalendar: [Function],
      mkcol: [Function],
      move: [Function],
      notify: [Function],
      options: [Function],
      patch: [Function],
      post: [Function],
      propfind: [Function],
      proppatch: [Function],
      purge: [Function],
      put: [Function],
      rebind: [Function],
      report: [Function],
      search: [Function],
      source: [Function],
      subscribe: [Function],
      trace: [Function],
      unbind: [Function],
      unlink: [Function],
      unlock: [Function],
      unsubscribe: [Function],
      del: [Function]
    }

      at Object.<anonymous> (src/routes/api/authors.test.js:8:9)
milosoria commented 3 years ago

Hola! Al correr el test, falla antes de poder hacer console.log, por lo que no imprime nada. Descubrimos que comentando el middleware de swagger en app.js, el test corre con normalidad y en este caso, los console.log retornan el mismo resultado que el de arriba!

sivicencio commented 3 years ago

Ah, interesante! ¿Es un package que están usando para el middleware de Swagger, o lo construyeron ustedes? Si es el primer caso, ¿qué package es?

Lo pregunto porque, si es un package, puede que tenga alguna configuración que les permita ejecutar los tests sin problemas. Ahora se agregará un check en la Github Action para los tests, por lo que si el código no está preparado para correr los tests de forma automática (sin tener que comentar la línea antes), les va a fallar y no podrán hacer merge de sus PRs.

milosoria commented 3 years ago

El package es koa2-swagger-ui y en app.js tenemos lo siguiente

const spec = yamljs.load('src/swagger/swagger.yaml');
app.use(
    koaSwagger({
        routePrefix: '/swagger', // host at /swagger instead of default /docs
        swaggerOptions: {
            spec,
        },
    }),
);

No encontré ninguna opción de configuración para evitar conflictos con jest 😞

milosoria commented 3 years ago

No existe alguna forma de que nos revisen la documentación de forma aislada? Porque nos tomó mucho tiempo hacerla y significaría un retraso en el trabajo 😢

sivicencio commented 3 years ago

No te preocupes, entiendo perfecto el tiempo que debe haberles tomado crear el archivo YAML para Swagger.

En una de las primeras líneas después de los requires, dentro de src/app.js se encuentra esto:

const testMode = app.env === 'test';

Esa variable testMode podrían utilizarla para evitar agregar el middleware al correr los tests de la siguiente forma:

if (!testMode) {
  const spec = yamljs.load('src/swagger/swagger.yaml');
  app.use(koaSwagger({ /* ... */ }));
}

Hagan la prueba de forma local y, por supuesto, también en Heroku para ver si se ve la documentación sin problemas.

milosoria commented 3 years ago

Súper, no se me había ocurrido, gracias por la ayuda!!!