我有一个简单的问题 Express
公开restful api的应用程序。它使用 Knex
及 Objection
访问数据库,以及 Jest
/ Supertest
用于测试api。
我有一个测试,它启动服务器,从给定的路由获取可用数据,并Assert接收到的值。除了那个,一切都很好 Jest
执行此测试后从不退出。
这是我的测试:
import { app } from "../../src/application.js";
import { describe, expect, test } from "@jest/globals";
import request from "supertest";
describe("Customer Handler", () => {
test("should retrieve all existing customer(s)", async () => {
const expected = [
// ...real values here; omitted for brevity
];
const response = await request(app).get(`/api/customers`);
expect(response.statusCode).toStrictEqual(200);
expect(response.headers["content-type"]).toContain("application/json");
expect(response.body).toStrictEqual(expected);
});
});
这个 application.js
这个文件看起来很像平常的文件 Express
安装/配置文件:
import { CustomerHandler } from "./handler/customer.handler.js";
import connection from "../knexfile.js";
import express from "express";
import Knex from "knex";
import { Model } from "objection";
const app = express();
Model.knex(Knex(connection[process.env.NODE_ENV]));
// ...removed helmet and some other config for brevity
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use("/api/customers", CustomerHandler);
app.use((err, req, res, next) => {
res.status(err.status || 500);
res.json({
errors: {
error: err,
message: err.message,
},
});
next();
});
export { app };
我试过了 --detectOpenHandles
,但控制台中没有打印任何其他内容,因此我看不到有关问题可能是什么的任何提示-我怀疑这是可能的 Knex
/ Objection
因为我正在使用 SQLite
,因此与数据库的连接可能没有关闭。
与此同时,我正在使用 --forceExit
,但我想弄清楚为什么 Jest
无法退出。
1条答案
按热度按时间jw5wzhpr1#
好吧,看来我这次选对了。
重构
application.js
输出Knex
对象(配置后),并调用knex.destroy()
测试通过后是此设置的解决方案。…然后在测试中,确保导入
knex
打电话destroy()
: