我一直在嘗試爲使用最新版本的Firebase分佈式數據庫的聚合物網絡組件配置脫機單元測試。我的一些測試通過,但其他—看起來幾乎相同傳遞的—未正常運行。單元測試使用火力點的聚合物網絡組件
我已經在github上建立了一個項目來演示我的配置,下面我會提供更多的評論。
樣品: https://github.com/doctor-g/wct-firebase-demo
在該項目中,也有說做工精細測試兩間套房。最簡單的是offline-test
,根本不使用Web組件。它只是表明可以使用Firebase數據庫的離線模式運行一些單元測試。這招的核心是suiteSetup
方法—下面顯示的方法我從nfarina's work on firebase-server拾取。
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();
});
});
我有分量一些非常簡單的方法爲好,我試圖向碎片我將在稍後談論三角。再次
pushIt: function(at, value) {
return this.database.ref(at).push(value);
},
,這些都通:我只想說,這個測試通過:
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
支持。現在我們到了真正的困境。還有另一種元素,x-element
,其中有一個方法pushData
一系列測試:
pushData: function(at, data) {
this.database.ref(at).push(data);
}
這種方法的測試是在its suite唯一的測試:
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
套件可以正常工作,但我在x-element_test
中收到此API密鑰錯誤?我唯一的線索是,如果我將一個有效的API密鑰複製到我的initializeApp
配置中,那麼我會得到一個測試超時。
UPDATE:
這裏是我的控制檯日誌的(拼湊在一起)圖像運行測試:
時爲了說明問題通過以下tony19長大,這裏的控制檯日誌只pushData has an effect
在x-element_test
註釋掉:
啊,非常有用的觀察@ tony19!我一直信任wct輸出而不看控制檯日誌。也許它比我所預期的更多。 – Paul