![](/img/trans.png)
[英]Firebase functions: How to stub firebase-admin functions when testing offline
[英]Unit testing firebase functions: how to stub firebase-admin sdk
在index.js中,我有以下内容
exports.write = functions.https.onRequest((req, res) => {
admin.database()
.ref(`xxx/yyy`)
.push()
.set({timestamp: admin.database.ServerValue.TIMESTAMP});
res.status(200).end();
});
在我的test.js中,我将admin.database()存根如下:
const refStub = sinon.stub();
setStub = sinon.stub();
refStub.withArgs('xxx/yyy').returns({push: () => ({key: 'fakeKey', set: setStub})});
databaseStub = sinon.stub(admin, 'database').get(() => {
return () => {
return {ref: refStub};
};
});
当我运行我的测试时,我得到以下错误TypeError: Cannot read property 'TIMESTAMP' of undefined
。 如何修复此错误或将调用存根到admin.database.ServerValue.TIMESTAMP
? 谢谢。
在JavaScript中,函数可以具有属性。
> function x() {}
undefined
> x
[Function: x]
> x.prop = 1
1
> x
{ [Function: x] prop: 1 }
>
有了这些知识,存根admin.database非常简单
var databaseStub = sinon.stub(admin, 'database').returns({ref: refStub});
//monkey patch database()'s property
admin.database.ServerValue = {TIMESTAMP: '1111'};
感谢Doug Stevenson在firebase slack频道向我指出它。 谢谢道格!
admin.database.ServerValue.TIMESTAMP
不是一个调用。 它是一个值永远不会改变的对象 - 由服务器端的数据库解释的特殊值。 如果你打印它,它看起来像这样:
{ '.sv': 'timestamp' }
因为它本质上是一个永不改变的常数值,所以不需要嘲笑它。
另外,我不清楚你是否正确使用它。 您应该将其指定为您写入实时数据库的对象的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.