Я пытаюсь протестировать Express маршрут POST API, который использует Express Validator для check
:
usersRouter.post(
'/',
[
check('name', 'Please enter a name.').not().isEmpty(),
check('email', 'Please enter a valid email.').isEmail(),
check(
'password',
'Please enter a password of 6 characters or more.'
).isLength({ min: 6 }),
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
console.log('errors: ', errors);
return res.status(400).json({ errors: errors.array() });
}
const { name, email, password } = req.body;
try {
//...
}
catch {
//...
}
}
);
Этот маршрут API ожидает получить запрос, состоящий из тела, содержащего поля, name
, email
и password
:
const { name, email, password } = req.body
Чтобы проверить этот маршрут, у меня есть тестовый файл с использованием supertest
и jest
:
const mongoose = require('mongoose');
const supertest = require('supertest');
const app = require('../app');
const testApi = supertest(app);
const User = require('../models/User');
test('a token is returned', async () => {
// Create a new test user for the HTTP request.
const newTestUser = {
name: 'bob',
email: 'test@test.com',
password: 'newtestpw',
};
const { name, email, password } = newTestUser;
const body = await JSON.stringify({ name, email, password });
// Execute the test.
const config = {
headers: {
'Content-Type': 'application/json',
},
};
let result = await testApi.post('/api/users', body, config);
expect(result.status).toBe(200);
expect(result.headers).toHaveProperty('token');
});
afterAll(async () => {
await mongoose.connection.close();
});
Когда я выполняю этот тест, все check
в маршруте POST API терпят неудачу. Возвращается следующее errors
:
errors: Result {
formatter: [Function: formatter],
errors:
[ { value: undefined,
msg: 'Please enter a name.',
param: 'name',
location: 'body' },
{ value: undefined,
msg: 'Please enter a valid email.',
param: 'email',
location: 'body' },
{ value: undefined,
msg: 'Please enter a password of 6 characters or more.',
param: 'password',
location: 'body' } ] }
Почему маршрут API не получает запрос, который я отправляю с помощью Supertest?