В моем API есть конечная точка загрузки изображений, которая принимает application/octet-stream
запросов и обрабатывает эти потоки. Я хотел бы написать тестовое покрытие для этой конечной точки, но не могу понять, как использовать супертест для потоковой передачи изображения.
Вот мой код:
import request from 'supertest'
const testImage = `${__dirname}/../../../assets/test_image.jpg`
describe('Upload endpoint', () => {
test('Successfully uploads jpg image', async () =>
request(app)
.post(`${ROOT_URL}${endpoints.add_image.route}`)
.set('Authorization', `Bearer ${process.env.testUserJWT}`)
.set('content-type', 'application/octet-stream')
.pipe(fs.createReadStream(testImage))
.on('finish', (something) => {
console.log(something)
}))
})
Этот код ничего не производит, событие finish
никогда не вызывается, ничего не регистрируется в консоли, и этот набор тестов фактически проходит, так как ничего не ожидается. Я не могу связать .expect
с этим запросом, иначе я получаю эту ошибку времени выполнения:
TypeError: (0 , _supertest2.default)(...).post(...).set(...).set(...).pipe(...).expect не является функцией
Как это делается?
imageStream.pipe(req)
. - person popthestack   schedule 05.04.2018async
/await
работает только с промисами, а не с потоками. Вам нужно будет изменить тестовую функцию, чтобы использовать(done)
и вызыватьdone()
в событии каналаfinish
/close
. - person popthestack   schedule 05.04.2018request
- это библиотекаsupertest
, как указано в заголовке вопроса. - person j_d   schedule 06.04.2018