如何阅读超测其余部分的附件?
How to read an attachement from res of supertest?
我有一个明确的终点“/api/posts/:id”,returns 一些关于 post 的元数据和 post 文件本身通过 res.attachment(post.fileName).send(post)
. (注意我不确定这是否正确)
我正在尝试使用 supertest 对其进行测试。后
const res = await request(server).get("/api/posts/a");
我可以通过 res.body
读取 post 元数据。但是如何阅读附件(即文件)呢?
编辑:
看来我需要使用formidable之类的库来读取返回的文件。 res.files 默认情况下为空,但强大的填充它。所以我试着在我的笑话测试文件中这样做,如下所示:
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);
});
但这没有用。控制台没有记录 "inside parse" 事实上,即使 expect(0).toBe(1) 应该使它失败,案例也通过了。
在回答之前,我只想指出我发送 post 的方式不正确。所以我最终通过 res.sendFile(post.fileName)
自行发送文件
继续阅读测试时的文件。如上所述,我不得不使用 formidable 来填充 res.files 参数。此外,我不得不修改我的 jest 测试函数,让它等待 formidable 的回调完成:
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);
}
});
});
编辑:
我发现一个更好的方法是使用超级测试期望通过:
const expectedFile = await fsPromises.readFile(filename);
request(server)
.get(`/api/posts/${post._id}/file`)
.expect(200, expectedFile, done);
我有一个明确的终点“/api/posts/:id”,returns 一些关于 post 的元数据和 post 文件本身通过 res.attachment(post.fileName).send(post)
. (注意我不确定这是否正确)
我正在尝试使用 supertest 对其进行测试。后
const res = await request(server).get("/api/posts/a");
我可以通过 res.body
读取 post 元数据。但是如何阅读附件(即文件)呢?
编辑:
看来我需要使用formidable之类的库来读取返回的文件。 res.files 默认情况下为空,但强大的填充它。所以我试着在我的笑话测试文件中这样做,如下所示:
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);
});
但这没有用。控制台没有记录 "inside parse" 事实上,即使 expect(0).toBe(1) 应该使它失败,案例也通过了。
在回答之前,我只想指出我发送 post 的方式不正确。所以我最终通过 res.sendFile(post.fileName)
继续阅读测试时的文件。如上所述,我不得不使用 formidable 来填充 res.files 参数。此外,我不得不修改我的 jest 测试函数,让它等待 formidable 的回调完成:
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);
}
});
});
编辑:
我发现一个更好的方法是使用超级测试期望通过:
const expectedFile = await fsPromises.readFile(filename);
request(server)
.get(`/api/posts/${post._id}/file`)
.expect(200, expectedFile, done);