Jest timeout testing Koa route

Я начинаю с Jest для тестирования нашего API. Однако в тот момент, когда я добавляю свой второй тест, все разваливается из-за исключения тайм-аута.

Вот мой код:

const server = require('../server')
const request = require('supertest')
const path = require("path")
const fs = require("fs")
const config = require('../knexfile.js')
const knex = require('knex')(config.development)

beforeAll(async () => {
  let file = fs.readFileSync(path.join(__dirname, '..', 'galaxycard.sql'), 'utf8')
  await knex.raw(file)
  await knex.migrate.latest()
})

afterAll(async () => {
  await knex.raw(`
    DROP SCHEMA public CASCADE;
    CREATE SCHEMA public;
    GRANT ALL ON SCHEMA public TO public;
  `)
  server.close()
})

describe("test 1", () => {
  it("should not be able to add a payment for user without credit", async () => {
    let response = await request(server)
      .post('/v1/hampers')
      .set('Content-Type', 'application/json')
      .send({
        entity_type: 'utility',
        latitude: 1,
        longitude: 1,
        comment: null,
        user_id: new Date().getTime(),
        amount: -200,
        entity_id: 1,
        processed: false
      })
    expect(response.status).toEqual(402)
  })
})

describe("test 2", () => {
  let userId
  beforeEach(async () => {
    userId = new Date().getTime()
    let response = await request(server)
      .post('/v1/hampers')
      .set('Content-Type', 'application/json')
      .send({
        entity_type: 'credit',
        latitude: 0,
        longitude: 0,
        user_id: userId,
        amount: 5000,
        entity_id: 1,
        processed: true
      })
    expect(response.status).toEqual(200)
    expect(JSON.parse(response.text)).toHaveProperty('uuid')
  })

  it("have hampers", async () => {
    let response = await request(server)
      .post('/v1/hampers')
      .set('Content-Type', 'application/json')
      .send({
        entity_type: 'utility',
        latitude: 1,
        longitude: 1,
        comment: null,
        user_id: userId,
        amount: -200,
        entity_id: 1,
        processed: false
      })
    expect(response.status).toEqual(200)
    expect(JSON.parse(response.text)).toHaveProperty('uuid')
  })
})

Шутка умирает с:

Timeout - Async callback was not invoked within the 5000ms timeout
specified by jest.setTimeout.

Еще одна странная проблема заключается в том, что Jest не завершается после запуска тестов, хотя я использую server.close.


person Amit    schedule 23.01.2018    source источник
comment
Из вашего вопроса я предполагаю, что первый describe блок, beforeAll и afterAll работают нормально. Можете выложить минимальную версию обработчика для /v1/hampers, воспроизводящего проблему?   -  person Rich Churcher    schedule 25.01.2018


Ответы (1)


Вторая проблема (кажется, что она зависает после тестового запуска), вероятно, вызвана отсутствием knex.destroy() в вашем afterAll. Я могу поговорить с первой проблемой, увидев определение вашего маршрута.

person Rich Churcher    schedule 25.01.2018