chai-fireproof
用於 Firebase 和 Fireproof 的 Chai 斷言和輔助工具。
需求
您需要能夠產生 Fireproof 參考。
用法
物件斷言
首先像其他 Chai 外掛一樣載入此外掛:gulp.task('test:setup', '設定測試。', ['build'], function() {
var Firebase = require('firebase'), chai = require('chai');
require('./dist/chai-fireproof'); global.chai = chai; global.expect = chai.expect;
if (!process.env.FIREBASE_TEST_URL | !process.env.FIREBASE_TEST_SECRET) { |
gutil.log('Please set FIREBASE_TEST_URL and FIREBASE_TEST_SECRET.');
process.exit(1);
}
global.root = new Fireproof(new Firebase(process.env.FIREBASE_TEST_URL)); global.authToken = process.env.FIREBASE_TEST_SECRET;
});
chai.use(require('chai-fireproof'));
現在您可以像對待其他任何事物一樣,對 Fireproof 物件建立斷言。請注意,這些會回傳 Promise,您必須將它們傳回您的測試框架或自行處理。
一個使用 Mocha 的範例
describe('My Firebase', function() {
var root = new Fireproof(new Firebase('https://metropolis.firebaseio.com'));
it('should have some data in there already', function() {
return expect(root.child('robots')).to.exist;
});
it('should have some users in there', function() {
return expect(root.child('citizens')).to.deep.equal({
fred: {
name: 'Freder Frederson',
hometown: 'Metropolis',
assignment: 'Utopia'
},
maria: {
name: 'Maria',
hometown: 'Metropolis',
assignment: 'Underworld'
}
});
});
it('should have the water level in there', function() {
return expect(root.child('waterLevel')).to.be.lessThan(5);
})
});
安全性測試
chai-fireproof 包含用於驗證安全性規則是否如預期運作的測試斷言。請注意,這些斷言會回傳 Promise,您必須將它們傳回您的測試框架或自行處理。
安全性測試有以下額外需求
- 不支援 firebaseio-demo.com,因為 Firebase 不會在那裡檢查規則。
- 在進行任何斷言之前,請使用驗證令牌呼叫
chai.setFirebaseAuthToken()
。
斷言上有四個新標誌和一個新方法
can (可以)
cannot (不能)
read (讀取)
write (寫入)
ref()
因此您可以撰寫符合以下語法的斷言
return expect({ uid: 'metropolis:maria' }).can.read.ref(root.child('users/maria'));
return expect({ uid: 'metropolis:robotmaria'}).cannot.read.ref(root.child('users/maria'));
期望物件(也就是說,斷言中包裹的東西)是一個具有驗證憑證的 JavaScript 物件。對於寫入測試,您可以提供一個物件來嘗試寫入參考 (ref) (用於測試驗證規則等)。
return expect({ uid: 'metropolis:robotmaria'}).cannot.write(true)
.to.ref(root.child('city/agitation'));
以下規則適用
- 如果期望物件為
null
,則斷言會假設您指的是未驗證的使用者。 - 除了
null
之外,每個使用者物件都必須提供uid
的值。 - 若要使令牌成為管理員令牌,請設定
admin: true
。請注意,從定義上來說,這會導致任何測試通過。
文件
此處提供 API 文件 。
警告
為了捕獲惱人的 Firebase 控制台訊息,此函式庫會猴子補丁 (monkeypatch) console.log()
、console.warn()
和 console.error()
。您的使用情況可能有所不同,在法律禁止的地方無效。