2017-12-22 22 views
0

、私は私のtest.jsでユニットテストfirebase機能は次のようにどのように)(firebase管理者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(); 
}); 

を以下している、私はスタブ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にスタブするにはどうすればよいですか?ありがとう。

答えて

0

JavaScriptでは、関数はプロパティを持つことができます。その知識と

> function x() {} 
undefined 
> x 
[Function: x] 
> x.prop = 1 
1 
> x 
{ [Function: x] prop: 1 } 
> 

、admin.databaseをスタブすると、クレジットがfirebaseスラックチャネル上で私にそれを指摘するためにDoug Stevensonに行く

var databaseStub = sinon.stub(admin, 'database').returns({ref: refStub}); 
//monkey patch database()'s property 
admin.database.ServerValue = {TIMESTAMP: '1111'}; 

と同じくらい簡単です。ありがとうダグ!

0

admin.database.ServerValue.TIMESTAMPは電話ではありません。値が決して変化しないオブジェクト、つまりサーバー側でデータベースによって解釈される特別な値です。あなたはそれを印刷した場合、それは次のようになります。それは、本質的に変化しない一定の値なので

{ '.sv': 'timestamp' } 

、それは嘲笑する必要はありません。

また、正しく使用しているかどうかはわかりません。 Realtime Databaseに書き込むオブジェクトの値として割り当てる必要があります。

+0

こんにちはダグ、応答していただきありがとうございます。私はそれをより明確にするために投稿を編集しました。あなたはそれを見直してもらえますか?ありがとう。 – user3240644

関連する問題