Fen*_*hao 9 node.js superagent supertest
我刚刚开始学习使用 supertest 和 mocha 进行测试。我读过supertest的api文档,它说supertest支持superagent提供的所有较低级别的API。SuperAgent 说我们可以通过以下方式发送 formData 对象:
request.post('/user')
.send(new FormData(document.getElementById('myForm')))
.then(callback)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 supertest 发送 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();
});
Run Code Online (Sandbox Code Playgroud)
其中 formData 是这样的:
let file;
let formData = new FormData();
let fn = "../../../Downloads/Images/5k.jpg";
formData.append("image", file);
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试发送这个对象时,它只是说:
TypeError: "string" must be a string, Buffer, or ArrayBuffer
Run Code Online (Sandbox Code Playgroud)
是否可以通过这种方式发送 formData 对象?我做错了什么或者该怎么做?如果没有,为什么?我搜索了很多相关问题,但没有一个能解决我的问题。我现在真的很挣扎。
您可以使用.attach()方法supertest将文件发送到服务器。的函数签名.attach:
attach(field: string, file: MultipartValueSingle, options?: string | { filename?: string; contentType?: string }): this;\nRun Code Online (Sandbox Code Playgroud)\n\n参数的数据类型file可以是:
type MultipartValueSingle = Blob | Buffer | fs.ReadStream | string | boolean | number;\nRun Code Online (Sandbox Code Playgroud)\n\n这里我将文件路径传递给.attach方法。
例如
\n\nserver.ts:
import express from \'express\';\nimport multer from \'multer\';\nimport path from \'path\';\n\nconst app = express();\nconst port = 3000;\nconst upload = multer({ dest: path.resolve(__dirname, \'uploads/\') });\napp.post(\'/upload\', upload.single(\'avatar\'), (req, res) => {\n console.log(\'file:\', req.file);\n console.log(\'content-type:\', req.get(\'Content-Type\'));\n res.sendStatus(200);\n});\n\nif (require.main === module) {\n app.listen(port, () => {\n console.log(`HTTP server is listening on http://localhost:${port}`);\n });\n}\n\nexport { app };\nRun Code Online (Sandbox Code Playgroud)\n\nserver.test.ts:
import { app } from \'./server\';\nimport request from \'supertest\';\nimport path from \'path\';\n\ndescribe(\'52359964\', () => {\n it(\'should pass\', () => {\n return request(app)\n .post(\'/upload\')\n .attach(\'avatar\', path.resolve(__dirname, \'./downloads/5k.jpg\'))\n .expect(200);\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n\n集成测试结果:
\n\n 52359964\nfile: { fieldname: \'avatar\',\n originalname: \'5k.jpg\',\n encoding: \'7bit\',\n mimetype: \'image/jpeg\',\n destination:\n \'/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/52359964/uploads\',\n filename: \'329756ab22bf7abe2d27866a322c2f30\',\n path:\n \'/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/52359964/uploads/329756ab22bf7abe2d27866a322c2f30\',\n size: 0 }\ncontent-type: multipart/form-data; boundary=--------------------------777489367435889931561092\n \xe2\x9c\x93 should pass (42ms)\n\n\n 1 passing (48ms)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
8543 次 |
| 最近记录: |