【发布时间】:2018-06-16 18:24:57
【问题描述】:
我正在阅读 how to mock google cloud functions for firebase 并且遇到了正确模拟以下代码的问题:
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var db = admin.firestore();
链接中的示例使用以下代码模拟 initializeApp 确实有效
admin = require('firebase-admin');
adminInitStub = sinon.stub(admin, 'initializeApp');
现在 admin.firestore 在 firebase-namespace.js 中定义如下:
Object.defineProperty(FirebaseNamespace.prototype, "firestore", {
get: function () {
var ns = this;
var fn = function (app) {
return ns.ensureApp(app).firestore();
};
return Object.assign(fn, require('@google-cloud/firestore'));
},
enumerable: true,
configurable: true
});
我尝试了各种方法来解决这个问题,但我失败了
-
firestore is not a function中的结果:Object.defineProperty(admin, "firestore", { get: function () { return 32; } }); -
根本不模拟 firestore() 并调用难以失败的原始函数:
sinon.stub(admin, 'firestore').returns({get() { }}); -
TypeError:无法存根不存在的自己的属性获取
firestoreStub = sinon.stub(admin.firestore, 'get').callsFake(function () {return {data:"Foo"}});
我不了解admin.firebase() 究竟是什么。它看起来不像是一个属性,因为 AFAI 当我模拟一个属性的 getter 时,我会调用 admin.firebase 而不是函数 admin.firebase()。但它也不能通过函数来模拟。
【问题讨论】:
标签: javascript unit-testing google-cloud-firestore sinon firebase-admin