Express.js + Jest + Supertest + TypeORM 参考错误

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

我正在尝试开发一个 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
不适合我

node.js typescript express ts-jest supertest
1个回答
0
投票

没有足够的声誉来发表评论,所以只是留下“答案”

@主题先生你知道如何解决它吗?我也有同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.