【发布时间】:2019-12-03 02:44:03
【问题描述】:
目前我们在在线模式下使用“firebase-functions-test”来测试我们的 firebase 功能(如此处所述 https://firebase.google.com/docs/functions/unit-testing),我们设置如下:
//setupTests.ts
import * as admin from 'firebase-admin';
const serviceAccount = require('./../test-service-account.json');
export const testEnv = require('firebase-functions-test')({
projectId: 'projectId',
credential: admin.credential.cert(serviceAccount),
storageBucket: 'projectId.appspot.com'
});
const testConfig = {
dropbox: {
token: 'dropboxToken',
working_dir: 'someFolder'
}
};
testEnv.mockConfig(testConfig);
// ensure default firebase app exists:
try {
admin.initializeApp();
} catch (e) {}
我们希望在我们的测试中不再针对实际的 Firestore 实例进行测试,而是使用模拟器。
我在网上找到的文档、问题和示例要么已经过时,要么描述了如何设置模拟器以测试安全规则或 Web 前端。
尝试使用firebase.initializeAdminApp({ projectId: "my-test-project" }); 没有成功。
我也试过设置FIRESTORE_EMULATOR_HOST=[::1]:8080,127.0.0.1:8080
所以问题是:如何在我的测试中初始化 firebaseApp,以便我的函数连接到 firestore 模拟器?
【问题讨论】:
-
严格来说,如果一个单元测试访问任何外部资源,甚至是一个模拟器,它就不再是一个单元测试——它是一个集成测试。通常,您将希望模拟任何外部依赖项,以便测试真正隔离(也称为密封)。如果您想使用模拟器执行集成测试,您可能不想将它们与单元测试结合起来,单元测试应该是封闭的。
-
如果您对完整的仿真器体验感兴趣(不涉及单元测试或 firebase-functions-test),您应该研究新的仿真器套件。 firebase.google.com/docs/functions/local-emulator
-
我编辑了这个问题,不再提及单元测试,因为你说的是正确的。您链接的模拟器正是我们想要开始工作的,因此问题在于如何将它与我们的测试联系起来。
-
@BastianStein 你有没有想过如何做到这一点
标签: firebase google-cloud-firestore google-cloud-functions firebase-tools