Я новичок в jest, node и express, и у меня возникла проблема с тестированием моего приложения.
Реальный код, кажется, работает - это просто при передаче экземпляра сервера в каждый из тестовых файлов (user.test.js и genres.test.js) и работает jest, порт блокируется.Я предполагаю, что это потому, что я создаю дубликаты экземпляров сервера в каждом тестовом файле, не осознавая этого.
Запуск jest с флагом --runInBand
работает, как и использование только одного тестового файла, но это нене поможет мне точно понять, что происходит.
Я разместил пример кода ниже, но я изо всех сил стараюсь его сократить, однако я думаю, что большая часть кода не имеет значения, и это простокак я передаю сервер каждому файлу.
Опять же, извиняюсь за длину, но я думаю, что это должно быть очень просто для всех, кроме меня!Спасибо.
index.js (.)
const express = require('express');
const app = express();
const genres = require('./routes/genres');
const users = require('./routes/users');
app.use(express.json());
app.use('/api/genres', genres);
app.use('/api/users', users);
const port = process.env.PORT || 3000;
const server = app.listen(port, () => console.log(`Listening on port ${port}...`));
console.log(typeof server);
// export server to be used in test file
module.exports = server;
genres.js (./routes)
const express = require('express');
const router = express.Router();
router.post('/', async (req, res) => {
res.send('post genre ok');
});
module.exports = router;
users.js (./routes)
const express = require('express');
const router = express.Router();
router.post('/', async (req, res) => {
res.send('post user ok');
});
module.exports = router;
genres.test.js (./tests)
const request = require('supertest');
let server;
describe('auth tests', () => {
const exec = async function(){
return await request(server)
.post('/api/genres');
};
beforeEach(() => {
server = require('../index');
});
afterEach(async () => {
await server.close();
});
describe('POST /', () => {
it('should return 200', async () => {
const res = await request(server).post('/api/genres');
expect(res.status).toBe(200);
});
});
});
user.test.js (./tests)
const request = require('supertest');
let server;
describe('user tests', () => {
const exec = async function(){
return await request(server)
.post('/api/user');
};
beforeEach(() => {
server = require('../index');
});
afterEach(async () => {
await server.close();
});
describe('POST /', () => {
it('should return 200', async () => {
const res = await request(server).post('/api/users');
expect(res.status).toBe(200);
});
});
});