Jest 在 运行 测试后挂起,尽管完成了()
Jest hangs after running test despite done()
所有,我试图实现的是编写一个测试用例,在传递一些有效凭据时检查工作的 knex 连接。以下测试用例执行正常,但在显示执行摘要后未完成执行。它在消息 "ran all tests" 之后卡住了,我必须明确地传递 quit 命令。我正在调用 done() 但它永远不会完成。
import * as Knex from "knex";
let knexClient:Knex< any, unknown>;
beforeAll(() => {
knexClient = Knex({
client: "mysql",
connection: {
host: "127.0.0.1",
user: "root",
password: "some_pwd",
database: "some_db"
}
});
});
describe("Ask for knex client with running db", () => {
it("should return a working connection", (done) => {
return knexClient.raw("select 1+1 as result").then((res:any)=>{
console.log(typeof(res))
done();
})
})
});
主要问题:我应该调整什么才能完成执行?
附带问题:此测试用例的异步版本是什么?
这通常是由于 Knex 保持与底层数据库进程的连接打开所致。您可以使用 afterAll
破坏连接,我已经包含了 async
版本以供比较:
import Knex from "knex";
import { test } from "../knexfile";
describe("Database stuff", () => {
let knexClient: Knex;
beforeAll(() => {
knexClient = Knex(test as Knex.Config);
});
afterAll(() => {
knexClient.destroy();
});
it("should work without hanging at the end of the test run", async () => {
const promise = knexClient.raw("SELECT 1+1 AS result");
// Because .raw returns a bunch of metadata, we need to do a little more
// to match the result
const expected = [{ result: 2 }];
await expect(promise).resolves.toContainEqual(expected);
});
it("rejects if the table doesn't exist", () => {
const promise = knexClient("non_existant_table");
// This also works. Note `return` is required here
return expect(promise).rejects.toThrowError(/doesn't exist/);
});
});
几件事。首先,请注意,我已经从 knexfile.js
中获取了配置,这里假设它是您的测试文件的一个目录。
其次,beforeAll
和 afterAll
仅 运行 在 文件 中的所有内容之前(和之后)。如果您想要在所有 测试 之前进行设置,包括其他文件中的那些,您需要将创建数据库客户端移到全局设置文件中。有关详细信息,请参阅 globalSetup。
所有,我试图实现的是编写一个测试用例,在传递一些有效凭据时检查工作的 knex 连接。以下测试用例执行正常,但在显示执行摘要后未完成执行。它在消息 "ran all tests" 之后卡住了,我必须明确地传递 quit 命令。我正在调用 done() 但它永远不会完成。
import * as Knex from "knex";
let knexClient:Knex< any, unknown>;
beforeAll(() => {
knexClient = Knex({
client: "mysql",
connection: {
host: "127.0.0.1",
user: "root",
password: "some_pwd",
database: "some_db"
}
});
});
describe("Ask for knex client with running db", () => {
it("should return a working connection", (done) => {
return knexClient.raw("select 1+1 as result").then((res:any)=>{
console.log(typeof(res))
done();
})
})
});
主要问题:我应该调整什么才能完成执行? 附带问题:此测试用例的异步版本是什么?
这通常是由于 Knex 保持与底层数据库进程的连接打开所致。您可以使用 afterAll
破坏连接,我已经包含了 async
版本以供比较:
import Knex from "knex";
import { test } from "../knexfile";
describe("Database stuff", () => {
let knexClient: Knex;
beforeAll(() => {
knexClient = Knex(test as Knex.Config);
});
afterAll(() => {
knexClient.destroy();
});
it("should work without hanging at the end of the test run", async () => {
const promise = knexClient.raw("SELECT 1+1 AS result");
// Because .raw returns a bunch of metadata, we need to do a little more
// to match the result
const expected = [{ result: 2 }];
await expect(promise).resolves.toContainEqual(expected);
});
it("rejects if the table doesn't exist", () => {
const promise = knexClient("non_existant_table");
// This also works. Note `return` is required here
return expect(promise).rejects.toThrowError(/doesn't exist/);
});
});
几件事。首先,请注意,我已经从 knexfile.js
中获取了配置,这里假设它是您的测试文件的一个目录。
其次,beforeAll
和 afterAll
仅 运行 在 文件 中的所有内容之前(和之后)。如果您想要在所有 测试 之前进行设置,包括其他文件中的那些,您需要将创建数据库客户端移到全局设置文件中。有关详细信息,请参阅 globalSetup。