Firebase 分散データベースの最新リリースを使用するポリマー Web コンポーネントのオフライン単体テストを構成しようとしています。私のテストのいくつかは合格していますが、合格したものとほぼ同じように見える他のテストは正しく実行されていません。
私の構成を示すプロジェクトを github にセットアップしました。以下にさらに解説を加えます。
サンプル: https://github.com/doctor-g/wct-firebase-demo
そのプロジェクトには、正常に動作する 2 つのテスト スイートがあります。最も単純なのはoffline-test
、Web コンポーネントをまったく使用しない です。これは単に、firebase データベースのオフライン モードを使用して単体テストを実行できることを示しています。このトリックの核心は、以下に示すメソッドにあります。これは、 firebase-server に関する nfarina の作業suiteSetup
から取り上げたトリックです。
suiteSetup(function() {
app = firebase.initializeApp({
apiKey: 'fake',
authDomain: 'fake',
databaseURL: 'https://fakeserver.firebaseio.com',
storageBucket: 'fake'
});
db = app.database();
db.goOffline();
});
すべてのテストにoffline-test
合格しました。
次のスイートはwct-firebase-demo-app_test.html
、同名の Web コンポーネントをテストする です。このスイートには、同様に設定されて合格する一連の単体テストが含まれていoffline-test
ます。依存性注入の考え方に従って、wct-firebase-demo-app
コンポーネントにはdatabase
、firebase データベース参照が渡される属性があり、これはすべての firebase 呼び出しを行うために使用されます。スイートの例を次に示します。
test('offline set string from web component attribute', function(done) {
element.database = db;
element.database.ref('foo').set('bar');
element.database.ref('foo').once('value', function(snapshot) {
assert.equal(snapshot.val(), 'bar');
done();
});
});
コンポーネントには非常に単純なメソッドもいくつかあります。これは、すぐに説明する壊れた部分に向かって三角測量を行う試みです。このテストに合格したと言えば十分です。
test('offline push string from web component function', function(done) {
element.database = db;
let resultRef = element.pushIt('foo', 'bar');
element.database.ref('foo').once('value', function(snapshot) {
assert.equal(snapshot.val()[resultRef.key], 'bar');
done();
});
});
で、次の実装によってサポートされていますwct-firebase-demo-app
。
pushIt: function(at, value) {
return this.database.ref(at).push(value);
},
繰り返しますが、これらはすべてパスします。今、私たちは本当の困惑にたどり着きます。x-element
メソッドを持つ別の要素 の一連のテストがありますpushData
。
pushData: function(at, data) {
this.database.ref(at).push(data);
}
このメソッドのテストは、そのスイートで唯一のテストです。
test('pushData has an effect', function(done) {
element.database = db;
element.pushData('foo', 'xyz');
db.ref('foo').once('value', function(snapshot) {
expect(snapshot.val()).not.to.be.empty;
done();
});
});
このテストは合格しません。このテストの実行中に、コンソールに次のエラー メッセージが表示されます。
Your API key is invalid, please check you have copied it correctly.
once
いくつかのブレークポイントを設定して実行をたどると、このエラーは呼び出しの後、コールバックがトリガーされる前に発生するように思えます。繰り返しますが、これは、上で説明した にある同じテスト構造では発生しないことに注意してくださいwct-firebase-demo-app
。
それが私が立ち往生しているところです。offline-test
およびwct-firebase-demo-app_test
スイートは正常に動作するのに、この API キー エラーが で表示されるのはなぜx-element_test
ですか? 私が持っている他の唯一の手がかりは、有効な API キーをinitializeApp
構成にコピーすると、代わりにテストタイムアウトが発生することです。
アップデート:
これは、テストを実行したときのコンソール ログの (パッチを適用した) イメージです。
以下のtony19によって提起された問題を説明するために、pushData has an effect
コメントアウトx-element_test
されたコンソールログを次に示します。