javascript - 如何使用 chai-http 放置 PDF?

标签 javascript node.js http testing chai

好吧,这是一个非常全面的问题,因为我需要了解流程和最佳实践。欢迎批评指正!

我正在为 PDF-to-image API 端点编写测试。因此,我需要 PDF 发送到端点。端点将其保存在本地、进行转换、将图像序列存储在 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 header 之前,我只需从服务器获取 413(请求太大)。我已经将所有超时和最大请求​​大小设置得很大,所以这真的不应该成为问题。但现在我在标题中有 application/pdf ,我收到此错误:

Uncaught TypeError: "string" must be a string, Buffer, or ArrayBuffer

这更有帮助,让我找到了这个 SO它将文件传送给请求。但是,我真的不确定如何通过 chai-http 来完成此操作,以便我的服务器可以成功获取 pdf 并将其保存到本地文件。

最佳答案

要通过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。请查看document了解更多详情。

关于javascript - 如何使用 chai-http 放置 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42738218/

相关文章:

ubuntu - 如何在 node.js npm 服务器上查看 socket.io 版本

http调用是RPC吗?

c - 如何包装 C 库以便可以从 Web 服务调用它

javascript - 这段代码中的 'recycling' 到底是什么意思?

node.js - 我需要为 Node 安装 WebSockets 库吗?

json - 如何将 JavaScript 函数存储到 mongoose 文档中?

apache - 是否可以用 Apache 或 Nginx 重写 SOAP POST 请求主体?

javascript - 无法关闭响应式菜单

流体布局中的 JavaScript 数据网格?

javascript - 如何在没有选择列表的情况下切换 jquery 盲效果(默认)