单元测试firebase函数:如何存根firebase-admin sdk

时间:2017-12-22 09:58:00

标签: javascript unit-testing firebase firebase-realtime-database sinon

在index.js中,我有以下

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};
    };
  });

在我的test.js中,我将admin.database()存根如下:

TypeError: Cannot read property 'TIMESTAMP' of undefined

当我运行测试时,出现以下错误admin.database.ServerValue.TIMESTAMP。如何修复此错误或将调用存根到image = np.zeros((400,400,3), dtype="uint8") image[np.where((image==[0,0,0]).all(axis=2))] = [0,0,255] ?感谢。

2 个答案:

答案 0 :(得分:2)

在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频道上指向我。谢谢道格!

答案 1 :(得分:0)

admin.database.ServerValue.TIMESTAMP不是电话。它是一个值永远不会改变的对象 - 由服务器端的数据库解释的特殊值。如果你打印它,它看起来像这样:

{ '.sv': 'timestamp' }

由于它本质上是一个永不改变的常数值,因此不需要进行模拟。

另外,我不清楚你是否正确使用它。您应该将其指定为您写入实时数据库的对象的值。