Проблема с макетом сервера при тестировании с помощью Jest и apollo-server

#tcp #jestjs #graphql #apollo-server

#tcp #jestjs #graphql #apollo-server

Вопрос:

Я использую apollo-server, jest и graphql. Я собираюсь сначала опубликовать все свои коды:

MockServer.ts

 export const startMockServer = async () => {
  await server.listen()
}
export const stopMockServer = async () => {
  await server.stop()
}
 

example.test.ts

 describe('Testing example', () => {
  beforeAll(async () => {
    await startMockServer()
  })

  beforeEach(async () => {
    await dbHelper.connect()
  })

  afterEach(async () => {
    await dbHelper.clearDatabase()
  })
  afterAll(async () => {
    await stopMockServer()
    await dbHelper.closeDatabase()
  })

//it test here
//it test here
 

company.test.ts

 describe('Testing company', () => {
  beforeAll(async () => {
    await startMockServer()
  })

  beforeEach(async () => {
    await dbHelper.connect()
  })

  afterEach(async () => {
    await dbHelper.clearDatabase()
  })
  afterAll(async () => {
    await stopMockServer()
    await dbHelper.closeDatabase()
  })
//it test here
//it test here
 

Хорошо, вот в чем проблема: когда я запускаю npm test , он запускается jest --forceExit . Однако он выдает EADDRINUSE: address already in use :::4000 ошибку. Насколько я понимаю, сервер afterAll закрывается после завершения тестирования example.test.ts . Когда он начинает тестирование company.test.ts , он запускает новый сервер с тем же портом 4000. Но проблема возникает из-за того, что порт 4000 находится в режиме TIME_WAIT (что бы это ни было), поэтому считается, что порт используется.

Есть ли какой-либо способ обойти это?

Ответ №1:

В итоге я использовал apollo-server-testing so, теперь мне не нужно иметь дело со всем этим испытанием.