node.js - 使用 Jest Supertest Formidable 测试端点时文件未以多部分形式发送
问题描述
我正在尝试测试应该接收多部分/表单数据的端点。我正在发送一组图像,我想处理并保存在服务器或 CDN 上。我正在使用 Jest、Express 和 Formidable。
端点
router.post("/videos", async (req, res) => {
new formidable.IncomingForm().parse(req, (err, fields, files) => {
console.log('PARSE FORM');
if (err) {
console.error('Error', err);
throw err
}
console.log('Fields', fields);
console.log('Files', files);
for (const file of Object.entries(files)) {
console.log('FILE', file)
}
});
res.status(200).send('Created Video');
});
测试
describe("Video Endpoints", () => {
it('should create a new timelapse video', done => {
request
.post('/api/videos')
.field('file', 'some random value')
.attach('image', `${__dirname}/__mocks__/image.png`)
.then(res => {
console.log('THEN');
done();
})
});
});
运行测试时,它没有达到强大的解析方法。
如果将我的附加方法更改为此...
.attach('image', fs.readFileSync(`${__dirname}/__mocks__/xdebugcurlaccessingwpapi.png`))
它将到达 parse 方法,但它将它视为字段而不是文件。
如果我使用 fetch 从我的反应应用程序发出相同的请求,它工作得非常好。
我究竟做错了什么?一直在这几天了,哈哈。
任何帮助都会很棒。
谢谢。
解决方案
我不完全确定为什么,但如果你添加
.set({connection: 'keep-alive'})
然后它工作。
最终解决方案
request
.post('/api/videos')
.set({connection: 'keep-alive'})
.field('name', 'Richard')
.attach('image', mockImage)
.then(res => {
console.log('THEN');
done();
});
});
如果有人能理解为什么会这样,那就太好了。
我认为它可能会关闭图像流,但不能确定。
推荐阅读
- uitableview - 如何在表格视图上显示复选标记?
- random - Diamond-Square 算法:如何确定运行菱形函数所需的图块以及运行平方函数所需的图块?
- firebase - Firebase 托管:部署不起作用 - 它停止并且没有给出任何响应
- api - CosmosDB 中的 NULL 继续令牌
- google-maps-api-3 - Google Places API 不显示自定义应用程序中的所有位置
- amazon-web-services - REST API - AWS EC2 每小时定价
- spring-batch - Spring Batch - 自定义阅读器和编写器
- html - 为什么我们需要在 css 中使用 -webkit?
- c# - 无法在 Hangfire 中安排超过 1 个作业
- matlab - 在 matlab 中声明一个我们不知道其大小的向量