QueryFailedError: SQLITE_MISUSE: 数据库句柄已关闭(sqllite 内存 Jest 测试)

s00*_*433 6 memory sqlite testing ts-jest

import app from "../src/app";\nimport request from "supertest";\nimport { createConnection, getConnection, getRepository } from "typeorm";\nimport { Group } from "../src/entity";\n\nbeforeEach(() => {\n    return createConnection({\n        type: "sqlite",\n        database: ":memory:",\n        dropSchema: true,\n        entities: ["src/entity/**/*.ts"],\n        synchronize: true,\n        logging: false,\n    });\n});\n\nafterEach(() => {\n    const conn = getConnection();\n    return conn.close();\n});\n\nconst group = new Group();\ngroup.creator_account_id = 1;\ngroup.group_name = "cook101";\ngroup.group_description = "cook101 with best chef";\ngroup.photoName = "cook101";\ngroup.photoUrl = "http://www.youtube.com/sd.jpg";\ngroup.photoKey = "cook101chef";\n\n\n// subscribe group\ndescribe("/subscribe/:group_id/:account_id route test", () => {\n    it("Should return a status of 201 with json data", async () => {\n        await group.save();\n        await request(app)\n            .post("/v1/subscribe/1/1")\n            .expect(201)\n            .then((res) => {\n                expect(res.body.groupAccount.account_id).toBe(1);\n            });\n    });\n\n    it("Should return a status of 400", async () => {\n        await request(app).post("/v1/subscribe/1x/1x").expect(400);\n    });\n});\n
Run Code Online (Sandbox Code Playgroud)\n

// 错误:

\n
 FAIL  tests/group.test.ts (9.678 s)\n  \xe2\x9c\x95 Should return a status of 400 (15 ms)\n  /subscribe/:group_id/:account_id route test\n    \xe2\x9c\x93 Should return a status of 201 with json data (241 ms)\n\n  \xe2\x97\x8f Should return a status of 400\n\n    QueryFailedError: SQLITE_MISUSE: Database handle is closed\n\n      at new QueryFailedError (src/error/QueryFailedError.ts:9:9)\n      at handler (src/driver/sqlite/SqliteQueryRunner.ts:79:26)\n      at replacement (node_modules/sqlite3/lib/trace.js:25:27)\n      at Database.errBack (node_modules/sqlite3/lib/sqlite3.js:14:21)\n\n  \xe2\x97\x8f Should return a status of 400\n\n    CannotExecuteNotConnectedError: Cannot execute operation on "default" connection because connection is not yet established.\n\n      at new CannotExecuteNotConnectedError (src/error/CannotExecuteNotConnectedError.ts:8:9)\n      at Connection.<anonymous> (src/connection/Connection.ts:226:19)\n      at step (node_modules/tslib/tslib.js:141:27)\n      at Object.next (node_modules/tslib/tslib.js:122:57)\n      at node_modules/tslib/tslib.js:115:75\n      at Object.__awaiter (node_modules/tslib/tslib.js:111:16)\n      at Connection.Object.<anonymous>.Connection.close (node_modules/typeorm/connection/Connection.js:169:24)\n      at Object.<anonymous> (tests/group.test.ts:19:14)\n
Run Code Online (Sandbox Code Playgroud)\n

ReferenceError:您正在尝试import在 Jest 环境被拆除后访问文件。

\n
  at src/util/DirectoryExportedClassesLoader.ts:41:22\n      at Array.map (<anonymous>)\n  at Object.importClassesFromDirectories (src/util/DirectoryExportedClassesLoader.ts:41:10)\n  at ConnectionMetadataBuilder.Object.<anonymous>.ConnectionMetadataBuilder.buildEntityMetadatas (src/connection/ConnectionMetadataBuilder.ts:59:56)\n  at Connection.Object.<anonymous>.Connection.buildMetadatas (src/connection/Connection.ts:517:59)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 0

尝试将所有方法转换为异步方法。beforeEach(async () => {....} afterEach(async () => {...} ...