首页 > 解决方案 > QueryFailedError: SQLITE_MISUSE: 数据库句柄已关闭(sqllite memory Jest 测试)

问题描述

import app from "../src/app";
import request from "supertest";
import { createConnection, getConnection, getRepository } from "typeorm";
import { Group } from "../src/entity";

beforeEach(() => {
    return createConnection({
        type: "sqlite",
        database: ":memory:",
        dropSchema: true,
        entities: ["src/entity/**/*.ts"],
        synchronize: true,
        logging: false,
    });
});

afterEach(() => {
    const conn = getConnection();
    return conn.close();
});

const group = new Group();
group.creator_account_id = 1;
group.group_name = "cook101";
group.group_description = "cook101 with best chef";
group.photoName = "cook101";
group.photoUrl = "http://www.youtube.com/sd.jpg";
group.photoKey = "cook101chef";


// subscribe group
describe("/subscribe/:group_id/:account_id route test", () => {
    it("Should return a status of 201 with json data", async () => {
        await group.save();
        await request(app)
            .post("/v1/subscribe/1/1")
            .expect(201)
            .then((res) => {
                expect(res.body.groupAccount.account_id).toBe(1);
            });
    });

    it("Should return a status of 400", async () => {
        await request(app).post("/v1/subscribe/1x/1x").expect(400);
    });
});

// 错误:

 FAIL  tests/group.test.ts (9.678 s)
  ✕ Should return a status of 400 (15 ms)
  /subscribe/:group_id/:account_id route test
    ✓ Should return a status of 201 with json data (241 ms)

  ● Should return a status of 400

    QueryFailedError: SQLITE_MISUSE: Database handle is closed

      at new QueryFailedError (src/error/QueryFailedError.ts:9:9)
      at handler (src/driver/sqlite/SqliteQueryRunner.ts:79:26)
      at replacement (node_modules/sqlite3/lib/trace.js:25:27)
      at Database.errBack (node_modules/sqlite3/lib/sqlite3.js:14:21)

  ● Should return a status of 400

    CannotExecuteNotConnectedError: Cannot execute operation on "default" connection because connection is not yet established.

      at new CannotExecuteNotConnectedError (src/error/CannotExecuteNotConnectedError.ts:8:9)
      at Connection.<anonymous> (src/connection/Connection.ts:226:19)
      at step (node_modules/tslib/tslib.js:141:27)
      at Object.next (node_modules/tslib/tslib.js:122:57)
      at node_modules/tslib/tslib.js:115:75
      at Object.__awaiter (node_modules/tslib/tslib.js:111:16)
      at Connection.Object.<anonymous>.Connection.close (node_modules/typeorm/connection/Connection.js:169:24)
      at Object.<anonymous> (tests/group.test.ts:19:14)

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

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

标签: sqlitetestingmemoryts-jest

解决方案


推荐阅读