使用 Jest Supertest Formidable 测试端点时,文件未以多部分形式发送
Files not being sent in a multipart form when testing endpoint using Jest Supertest Formidable
我正在尝试测试应该接收 multipart/form-data 的端点。我正在发送一组图像,我想处理这些图像并将其保存在服务器或 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`))
它将到达解析方法,但它将它视为字段而不是文件。
如果我发出相同的请求,但使用 fetch 从我的 React 应用程序发出,则它工作得很好。
我做错了什么?已经搞了几天了哈哈。
任何帮助都会很棒。
谢谢。
我不完全确定为什么,但如果你添加
.set({connection: 'keep-alive'})
然后就可以了。
最终解决方案
request
.post('/api/videos')
.set({connection: 'keep-alive'})
.field('name', 'Richard')
.attach('image', mockImage)
.then(res => {
console.log('THEN');
done();
});
});
如果有人能理解为什么会这样就好了。
我认为它可能会关闭图像流但不能确定。
我正在尝试测试应该接收 multipart/form-data 的端点。我正在发送一组图像,我想处理这些图像并将其保存在服务器或 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`))
它将到达解析方法,但它将它视为字段而不是文件。
如果我发出相同的请求,但使用 fetch 从我的 React 应用程序发出,则它工作得很好。
我做错了什么?已经搞了几天了哈哈。
任何帮助都会很棒。
谢谢。
我不完全确定为什么,但如果你添加
.set({connection: 'keep-alive'})
然后就可以了。
最终解决方案
request
.post('/api/videos')
.set({connection: 'keep-alive'})
.field('name', 'Richard')
.attach('image', mockImage)
.then(res => {
console.log('THEN');
done();
});
});
如果有人能理解为什么会这样就好了。
我认为它可能会关闭图像流但不能确定。