我已经与Jest建立了针对Firestore的CRUD操作的单元测试,以及安全规则。测试取决于本地运行的firestore-emulator。
问题是从数据库读取和写入非常慢。几乎总是超过默认超时时间。
Jest估计需要105秒才能运行大约30个测试。
测试实际上要在完成时才能工作,但是我相信它不会花这么长时间。
除其他事项外,我尝试将默认超时时间增加到15s,但这还不够。
测试示例:
beforeAll(async () => {
jest.setTimeout(10000);
const app = initializeAdminApp({ projectId: "firestore-test" });
//NOTE: "interfaces" is just a wrapper for CRUD on my documents
const users = interfaces(app).users;
});
afterEach(async () => {
await clearFirestoreData({
projectId: `firestore-test`
});
});
afterAll(async () => {
await Promise.all(apps().map(app => app.delete()))
});
// NOTE: often (not always) takes a long time to complete.
it("is possible to delete", async () => {
const id = await reviews.createOne(dummy.review());
const before = reviews.read(id)
await reviews.delete(id);
const after = reviews.read(id);
assertSucceeds(before);
assertFails(after);
});
我希望对firestore-emulator的操作所花的时间应该少于它。
更新:事实证明,问题主要出在clearFirestore
上,它是在每次测试后完成的。这样将运行时间减少到18s。
但是,理想情况下,我想在每次测试后清除元素,以使测试更加独立。
clearFirestore
是否需要花费这么长时间?