【发布时间】:2020-11-06 05:39:15
【问题描述】:
我正在使用 Jest 和 Supertest 的组合来测试 API 端点。我正在使用 Jest 的 beforeAll() 函数在一组测试之前调用端点一次。在调用端点之前,我正在使用 fs.readFile 从文件中读取请求正文。
无论我尝试什么,我似乎都无法等待调用 fs.readFile 的函数的结果。我的请求每次都会导致 400 响应,因为没有等待函数 readRequestBody。似乎程序流程正在继续而不等待结果,因此发送了一个空的请求正文。
代码:
describe("Test POST call " + process.env.ENV, () => {
const url = config.apiURL;
let responseData: request.Response;
beforeAll(async (done) => {
const requestBody = await readRequestBody();
responseData = await request(config.apiURL)
.post("/v1.0/subjects/courses")
.send(requestBody)
.accept("application/vnd.api+json")
.set("content-type", "application/vnd.api+json");
done();
});
test("authorized should return 201 status code", () => {
expect(responseData.status).toBe(201);
});
});
async function readRequestBody() : Promise<string> {
let requestBody: string = "";
fs.readFile("./request.json", "utf8", (err, req) => {
if (err) {
console.log("Error loading request: " + err.message)
}
requestBody = req.replace("{{newCourseUuid}}", uuid.v4());
});
return requestBody;
}
我了解fs.readFile 异步读取文件的内容,但看起来我没有正确等待结果。我错过了什么?这是否与 beforeAll 本身是一个异步函数这一事实有关?
【问题讨论】:
-
改用
await fs.promises.readFile('file.txt') -
令人难以置信 - 工作愉快!谢谢! :) 如果您将此添加为答案,我会将其标记为正确。
标签: javascript typescript asynchronous jestjs supertest