好吧,这是一个非常完整的问题,因为我需要了解过程和最佳实践。欢迎批评!
我正在为一个PDF-to-image API端点编写一个测试。因此,我需要put的PDF到endpoint。端点将在本地保存它,转换它,将图像序列存储在一个S3桶中,然后发送一个URL数组。但是,由于我编写这个测试主要是为了帮助开发,所以目前还没有这样的测试。我只想确保我能够在端点接收到PDF,并保存它。
查看下面的测试代码:
// testing dependencies
const chai = require("chai")
const chaiHttp = require("chai-http")
const should = chai.should()
const server = require('./../index.js')
chai.use(chaiHttp)
// utility dependencies
const fs = require('fs')
describe("PDF upload", () => {
it("should PUT my pdf", (done) => {
fs.readFile('./content/pdf/lockheed.pdf', (err, res) => {
if (err) { console.error(err) }
else {
chai.request(server)
.put('/v1/convert-pdf')
.set('Content-Type', 'application/pdf')
.send({ pdf: res })
.end((err, res) => {
console.log("got the res")
if (err) { console.error(err) }
else { console.log(res.body) }
done()
})
}
})
})
})在设置Content-Type头之前,我只需从服务器获得413 (请求太大)。我已经设置了我所有的超时和最大请求大小,所以这真的不应该是一个问题。但是现在头中有了application/pdf,我得到了以下错误:
Uncaught TypeError: "string" must be a string, Buffer, or ArrayBuffer这更有帮助,并引导我使用这个所以,它将文件导入到请求中。但是,我真的不知道如何通过chai-http实现这一点,这样我的服务器就可以成功地获取并保存pdf到本地文件中。
发布于 2017-03-13 06:49:25
要通过chai-http上传文件,请使用attach而不是send。下面是一个示例:
describe("PDF upload", () => {
it("should PUT my pdf", (done) => {
chai.request(server)
.put('/v1/convert-pdf')
.set('Content-Type', 'application/pdf')
.attach('fileField', './content/pdf/lockheed.pdf', 'lockheed.pdf')
.end((err, res) => {
console.log("got the res");
if (err) {
console.error(err)
} else {
console.log('success');
console.log(res.body)
}
done();
});
})
})实际上,chai-http遵循与SuperAgent相同的API。有关更多细节,请查看文档。
https://stackoverflow.com/questions/42738218
复制相似问题