我刚刚开始学习用超级测试和摩卡测试。我已经阅读了supertest的api文档,它说supertest支持superagent提供的所有较低级别的API。 SuperAgent表示我们可以通过以下方式发送formData对象:
request.post('/user')
.send(new FormData(document.getElementById('myForm')))
.then(callback)
但是当我尝试使用这种形式的超级测试发送formData对象时:
server
.post('/goal_model/images/' + userId + '/' + tmid)
.set('Authorization',`Bearer ${token}`)
.send(formData)
.expect("Content-type",/json/)
.expect(201)
.end(function(err,res){
should(res.status).equal(201);
console.log(res.message);
done();
});
formData如下:
let file;
let formData = new FormData();
let fn = "../../../Downloads/Images/5k.jpg";
formData.append("image", file);
然后,当我尝试发送此对象时,它只是说:
TypeError: "string" must be a string, Buffer, or ArrayBuffer
是否可以通过这种方式发送formData对象?我做错了什么或怎么做?如果没有,为什么?我搜索了许多相关问题,但没有一个可以解决我的问题。我现在真的很挣扎。
答案 0 :(得分:0)
您可以使用.attach()
的{{1}}方法将文件发送到服务器。 supertest
的功能签名:
.attach
attach(field: string, file: MultipartValueSingle, options?: string | { filename?: string; contentType?: string }): this;
参数的数据类型可以是:
file
在这里,我将文件路径传递给type MultipartValueSingle = Blob | Buffer | fs.ReadStream | string | boolean | number;
方法。
例如
.attach
:
server.ts
import express from 'express';
import multer from 'multer';
import path from 'path';
const app = express();
const port = 3000;
const upload = multer({ dest: path.resolve(__dirname, 'uploads/') });
app.post('/upload', upload.single('avatar'), (req, res) => {
console.log('file:', req.file);
console.log('content-type:', req.get('Content-Type'));
res.sendStatus(200);
});
if (require.main === module) {
app.listen(port, () => {
console.log(`HTTP server is listening on http://localhost:${port}`);
});
}
export { app };
:
server.test.ts
集成测试结果:
import { app } from './server';
import request from 'supertest';
import path from 'path';
describe('52359964', () => {
it('should pass', () => {
return request(app)
.post('/upload')
.attach('avatar', path.resolve(__dirname, './downloads/5k.jpg'))
.expect(200);
});
});