我正在尝试开发一个 API 并使用 jest + supertest + typeorm 对其进行测试。因此,如果我导入服务器实例,我会看到此错误:
ReferenceError: You are trying to "import" a file after the Jest environment has been torn down. From test/Test.test.ts.
// src/app.ts
import express from "express";
import ds from "./app-data-source";
ds.initialize().catch((err) => {
console.error("Error during Data Source initialization:", err)
})
const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.on("close", () => ds.destroy())
export default app;
// src/server.ts
import app from "./app";
const server = app.listen(3000);
export default server;
// src/app-data-source.ts
import { DataSource } from "typeorm"
const ds = new DataSource({
type: "sqlite",
database: ":memory:",
entities: ["src/entity/*.ts"],
logging: false,
synchronize: true,
})
export default ds;
// test/Test.test.ts
import request from "supertest";
import server from "../src/server";
describe("GET / - a simple api endpoint", () => {
test("Test #1", async () => {
const response = await request(server).get("/");
expect(response.statusCode).toBe(404);
});
afterAll(done => {
server.close(done)
})
});
结果我得到了这个错误
yarn run v1.22.17
warning ../package.json: No license field
$ NODE_ENV=test jest --runInBand
PASS test/Test.test.ts
GET / - a simple api endpoint
✓ Test #1 (9 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 1.134 s, estimated 2 s
Ran all test suites.
ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From test/Test.test.ts.
at tryToRequire (node_modules/src/util/ImportUtils.ts:21:17)
at importOrRequireFile (node_modules/src/util/ImportUtils.ts:35:25)
at async /Users/sergey/Work/*****/node_modules/src/util/DirectoryExportedClassesLoader.ts:57:45
at async Promise.all (index 0)
at async importClassesFromDirectories (node_modules/src/util/DirectoryExportedClassesLoader.ts:63:18)
at async ConnectionMetadataBuilder.buildEntityMetadatas (node_modules/src/connection/ConnectionMetadataBuilder.ts:92:17)
at async DataSource.buildMetadatas (node_modules/src/data-source/DataSource.ts:674:13)
at async DataSource.initialize (node_modules/src/data-source/DataSource.ts:242:13)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
我发现这是一个问题,可能是由于开放的 typeorm 连接造成的,但我不知道如何解决它,因为我知道
// In test file
// ...
afterAll(done => {
server.close(done)
})
// ...
以及
import ds from "./app-data-source";
ds.initialize() // ...
// ...
app.on("close", () => ds.destroy())
我尝试在Google上搜索信息,但没有找到任何有用的信息,所有答案都对我没有帮助,
useFakeTimers
不适合我
没有足够的声誉来发表评论,所以只是留下“答案”
@主题先生你知道如何解决它吗?我也有同样的问题