【问题标题】:beforeEach in Jest timing out when clearing db清除数据库时,beforeEach in Jest 超时
【发布时间】:2021-11-30 10:55:49
【问题描述】:

我正在尝试在每次测试之间以 typeorm 清除我的数据库中的动态表,所以我有这个 clear 功能:

const database  = {

  async create() {
    await createConnection();
  },

async clear() {

    return new Promise(async (resolve, reject) => {
      console.log("Clear database...");
      const dynamicEntities = [
          EntityOne,
          EntityTwo,
          EntityThree
      ];

      try{// iterate over dynamic entities and clean all their tables
        
        for (let entity of dynamicEntities) {
          // get entity repository
          const repository = getRepository(entity);
          // delete all rows
          await repository.delete({});
        }
        resolve("Successfully clear database!!!");
      }catch(err){
        reject(err);
      }
    })
},
};

当我将它与 beforeAll 或 afterAll 一起使用时它工作正常,但是当有多个 describe() 时它会超时,并且我需要几个描述来进行测试。

我需要完成这项工作:

describe("testing jest", () => {

beforeAll(async () => {
  await database.create();
});

  afterEach(async() => {
    await database.clear();
});

  describe("test 1", () => {
    it("should return 200", () => {
        expect(100+100).toBe(200)
    });
  });

  describe("test 2", () => {
    it("should return 100", () => {
      expect(50+50).toBe(100)
    });
  });
});

谢谢!

【问题讨论】:

标签: typescript jestjs typeorm


【解决方案1】:

找到它,我还在 clear() func for 循环中禁用了 fk 检查并稍后重新启用它,但是当我将它移到循环之外时它起作用了,并且 beforeEach 不再超时

try{// iterate over dynamic entities and clean all their tables
        await getConnection().createQueryRunner().query(`SET FOREIGN_KEY_CHECKS=0;`);
        for (let entity of dynamicEntities) {

            // get entity repository
            const repository = getRepository(entity);
            // delete all rows
            await repository.delete({});
        }
        await getConnection().createQueryRunner().query(`SET FOREIGN_KEY_CHECKS=1;`);
        resolve("Successfully clear database!!!");
      }catch(err){
        await getConnection().createQueryRunner().query(`SET FOREIGN_KEY_CHECKS=1;`);
        reject(err);
      }

【讨论】:

  • 更新:由于我使用这个函数运行多个测试套件,我需要按顺序运行它们(--runInBand),否则有时数据库没有被清除或者虚拟数据没有被转储时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 2011-07-19
  • 1970-01-01
  • 2019-12-03
  • 2023-03-03
  • 1970-01-01
  • 2011-07-05
相关资源
最近更新 更多