【问题标题】:How to read an attachement from res of supertest?如何从其他超测中读取附件?
【发布时间】:2020-10-08 09:57:34
【问题描述】:

我有一个明确的端点“/api/posts/:id”,它通过res.attachment(post.fileName).send(post) 返回有关帖子和帖子文件本身的一些元数据。 (注意我不确定这是否正确)

我正在尝试使用 supertest 对其进行测试。后 const res = await request(server).get("/api/posts/a"); 我可以通过res.body 阅读帖子元数据。但是如何阅读附件(即文件)?

编辑:

看来我需要使用像强大的库来读取返回的文件。 res.files 默认为 null,但会填充它。所以我尝试在我的 jest 测试文件中这样做:

const res = await request(server).get(`/api/posts/${post._id}`);
const form = formidable();
form.parse(res, (err, fields, files) => {
  console.log("inside parse");
  expect(0).toBe(1);
});

但这没有用。控制台没有记录“内部解析”,实际上这个案例通过了,即使 expect(0).toBe(1) 应该让它失败。

【问题讨论】:

    标签: jestjs supertest superagent formidable


    【解决方案1】:

    在回答之前,我只想指出我发送帖子的方式不正确。所以我最终通过res.sendFile(post.fileName)单独发送文件

    在测试时继续读取文件。如上所述,我必须使用强大的来填充 res.files 参数。此外,我不得不修改我的 jest 测试函数,让它等待强大的回调完成:

    it("returns 200 with post file when given existing post id", async (done) => {
      ...
    
      const res = await request(server).get(`/api/posts/${post._id}`);
      const form = formidable();
      form.parse(res, (err, fields, files) => {
        try {
          expect(0).toBe(1);
          done();
        } catch (error) {
          done(error);
        }
      });
    });
    

    编辑:

    我发现一个更好的方法是使用 supertest expect via:

    const expectedFile = await fsPromises.readFile(filename);
    request(server)
      .get(`/api/posts/${post._id}/file`)
      .expect(200, expectedFile, done);
    

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 2015-01-30
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多