Я пытаюсь проверить мой API с Jest. Я хочу больше абстракции, поэтому я создал эту функцию:
const tokensConfig = config.get('test.tokens');
function testIt(method = 'get', url = '/', statuses = [], body = {}) {
const testNames = ['unauthorized', 'user', 'admin'];
const tokens = [null, tokensConfig.user, tokensConfig.admin];
for (let i = 0; i < testNames.length; i++) {
test(testNames[i], async () => {
const response = await request(app)
[method](url)
.set('Accept', 'application/json')
.set('Authorization', tokens[i])
.send(body);
expect(response.statusCode).toBe(statuses[i]);
});
}
}
В файле test.js я запускаю:
const config = require('config');
const request = require('supertest');
const testIt = require('./testIt');
const app = require('../app');
// It's work
describe('get user by email', () => {
testIt('get', '/users/get-by-email/user@test', [401, 403, 200]);
});
// It's not work
describe('delete user', async () => {
const userByEmail = await request(app)
.get('/users/get-by-email/user@test')
.set('Accept', 'application/json')
.set('Authorization', config.get('test.tokens.admin'));
testIt('delete', `/users/${userByEmail._id}`, [401, 403, 200]);
});
Неисправность в асинхронном режиме / ожидании - тест выполняется до запроса пользователя.
Если я перемещу тест (или его), чтобы описать блок из функции testIt и создаю запрос пользователя внутри теста, он будет работать. Но я хочу больше абстракции (тестовый блок очень большой для многих тестов)
Как это исправить?