Приведенный код не дает большого понимания, так как я ожидаю, что вся обработка запроса будет в вашем обработчике маршрута. Проблема в том, что вы не можете получить доступ к телу при выполнении тестов с supertest
? Или что это не работает вообще. Дополнительная информация была бы очень полезна.
Если это проблема supertest
, я бы рекомендовал проверить документы для хороших примеров . Вот что я извлек прямо с сайта NPM, где они ПОСТАВЛЯЮТ некоторые данные с телом запроса, а затем проверяют тело ответа:
describe('POST /user', function() {
it('user.name should be an case-insensitive match for "john"', function(done) {
request(app)
.post('/user')
.send('name=john') // x-www-form-urlencoded upload
.set('Accept', 'application/json')
.expect(function(res) {
res.body.id = 'some fixed id';
res.body.name = res.body.name.toLowerCase();
})
.expect(200, {
id: 'some fixed id',
name: 'john'
}, done);
});
});
Кроме того, если вы пытаетесь протестировать свой сервер, вам, вероятно, следует импортируйте ваш серверный код вместо создания нового express экземпляра. Например, в коде вашего сервера у вас будет что-то вроде этого:
server.js
const express = require('express');
const app = express();
app.use('/', ...) // middleware/route config
...
module.exports = app;
Ваш сервер будет использовать этот сервер следующим образом:
index.js
const app = require('./server')
const port = 4000
app.listen({ port }, () => {
const location = `http://localhost:${port}`
logger.info(`? Server ready at ${location}`)
})
module.exports = app
Теперь, когда вы структурировали свой код таким образом, в своем тесте вы также можете импортировать свой сервер (то есть вы тестируете свой реальный сервер, а не новый сервер, который вы создали):
server.test.js
const app = require('../../../server');
const request = require('supertest')(app);
describe('Server', () => {
it('does a thing', async () => {
const { body } = await request
.post('http://path/to/test')
.send({ data: 'some data' })
.set('Content-Type', 'application/json')
.set('Accept', 'application/json')
.expect(200);
expect(body.thing).toBeTrue();
});
});