2017-08-18 18 views
0

私はいくつかの関数でchanged()関数を使用しています。functions.database.DeltaSnapshot#予期しない結果が変更されました

問題を説明するために、次のファイルにいくつかのテストを追加しました。 https://github.com/firebase/firebase-functions/blob/master/src/providers/database.ts

it('should be false when the current value has not changed',() => { 
    populate({ a: { b: 'c' } }, { a: { b: 'c' } }); 
    expect(subject.child('a').changed()).to.be.false; 
}); 

it('should be false when the current value has not changed, child path exists',() => { 
    populate({ a: { b: 'c' } }, { a: { b: 'c' } }); 
    expect(subject.child('a/b').changed()).to.be.false; 
}); 

it('should be false when the current value has not changed, child path does not exist',() => { 
    populate({ a: { b: 'c' } }, { a: { b: 'c' } }); 
    expect(subject.child('a/d').changed()).to.be.false; 
}); 

最初の2つのテストが失敗し、しかし、私は変更()関数はfalseを返すように期待。私はドキュメントを誤解していますか?クラウド関数のFirebase SDKのユニットテストで

参考文献https://firebase.google.com/docs/reference/functions/functions.database.DeltaSnapshot#changed

+2

これは実世界で失敗したか、単体テストでしか生きていないのですか? 'populate()'はあなたが思っているようなことをしていません - 最初の引数は古いデータ、2番目の引数は新しいデータへの**デルタ**です。変更されていないものは2番目の引数に含まれていてはいけません。そのため、テストが失敗しています。 –

+0

ええ、ちょうど単体テスト、その意味は、署名は 'データ、デルタ'です。 – dre

+0

@MichaelBleighあなたは答えとしてあなたのコメントを提供できますか? –

答えて

0

populateの署名がpopulate(data, delta)あります。つまり元のデータとは元のデータからに変更されます。

SDKが変更をチェックすると、その値がdeltaペイロードに存在するかどうかを確認することによって変更が行われます。展開された関数では、変更されていないものは、ペイロードdeltaで明示的に送信されません。