#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, теперь мне не нужно иметь дело со всем этим испытанием.