【发布时间】:2020-01-11 03:57:53
【问题描述】:
server.js 是一个使用 jwt 令牌的简单 express.js 文件。我目前想测试一个只返回字符串“Hello World”的简单路由,如下所示
app.get("/", (req, res) => {
res.send("Hello World");
});
下面的代码是我的 jest 文件,它使用 supertest 发送请求以及有效的 jwt 令牌
const supertest = require("supertest");
let server, request;
const serverStart = new Promise(resolve => {
server = require("../server.js");
request = supertest(server);
server.on("app_started", () => {
resolve();
});
});
beforeAll(async () => {
await serverStart;
});
afterAll(() => {
server.close();
});
describe("When testing the server.js", () => {
it("Should connect successfully and be able to return a response", async () => {
const response = await request
.get("/")
.set("Authorization", `bearer ${process.env.AUTHTOKEN}`);
expect(response.text).toBe("Hello World");
console.log(response.text);
});
});
当运行这个笑话时(在超时 5 秒后)说 Timeout - Async callback was not invoked within the 5000ms timeout specified 但是,我在期望函数输出“Hello World”到控制台后添加的 console.log 意味着发出请求并返回一个值但它与代码一起运行,但只是跳过了期望函数
我也尝试过使用done() 和then(),但两次都出现相同的错误,我在控制台记录了通话前后的时间,发现只需要几毫秒即可返回一个值,那么为什么期望似乎没有完成测试?
【问题讨论】:
-
你不应该调用 serverStart 而不是
await serverStart吗?应该是await serverStart() -
@AshishModi 为什么?这是一个承诺,而不是一个功能。
-
@AjayDabas 我的错。没想到
-
@Blingdude 我不是在“跳过”预期的功能。单元测试只需要比指定限制更长的时间(此处默认限制为 5000 毫秒)。尝试将时间限制增加到 10000 毫秒。您可以在
it()函数中执行此操作,如下所示:it("",()=>{...},10000) -
是的,我尝试将超时时间增加到 30000,但它表示相同的消息,但改为 30000:/
标签: javascript node.js express jestjs