jest异步测试,忽略Expect()函数

问题描述 投票:0回答:1

server.js是使用jwt令牌的简单express.js文件。我当前要测试一条仅返回字符串“ Hello World”的简单路由,如下所示

app.get("/", (req, res) => {
  res.send("Hello World");
});

下面的代码是我的笑话文件,它使用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,但是,我在Expect函数之后添加的console.log向控制台输出“ Hello World”,表示已发出请求并返回值,但是它带有代码,但只是跳过了期望函数

我也使用done()then()进行了尝试,但是两次都出现了相同的错误,并且我在控制台上记录了通话前后的时间,发现返回通话仅需几毫秒的时间值,那么为什么期望值似乎无法完成测试?

javascript node.js express jest
1个回答
0
投票

非常确定您的问题是您正在听的app_started事件。我不知道该事件在哪里记录。我认为您应该改用listening。我将对您的server.js文件进行一些假设。

以下测试通过。我认为您的测试从未真正开始,因为您正在监听一个永远不会触发的事件。

这是我正在测试的server.js

文件:
const http = require("http");
const express = require("express");

const app = express();

app.get("/", (req, res) => {
    res.send("hello");
});

const server = http.createServer(app);

server.listen(8081);

module.exports = server;

这是我的测试文件server.test.js

const supertest = require("supertest");

let server, request;

const serverStart = new Promise(resolve => {
    server = require("./server.js");
    request = supertest(server);
    server.on("listening", () => resolve());
});

beforeAll(async () => {
    await serverStart;
});

afterAll(() => {
    server.close();
});

describe("server", () => {
    it("should get hello", async () => {
        const response = await request.get("/");
        expect(response.text).toBe("hello");
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.