清除数据库时,Jest 中的 beforeEach 超时
beforeEach in Jest timing out when clearing db
我试图在每次测试之间用 typeorm 清除我的数据库中的动态表,所以我有这个清晰的功能:
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)
});
});
});
谢谢!
找到了,我还在我的 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);
}
我试图在每次测试之间用 typeorm 清除我的数据库中的动态表,所以我有这个清晰的功能:
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)
});
});
});
谢谢!
找到了,我还在我的 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);
}