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オブジェクトに対してアサーションを作成できます。これらは、テストフレームワークに返すか自分で処理する必要がある、プロミスを返します。
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には、想定どおりにセキュリティルールが機能していることを検証するテストアサーションが含まれています。これらは、テストフレームワークに返すか自分で処理する必要がある、プロミスを返します。
セキュリティテストには、次の追加要件があります。
- firebaseio-demo.comはサポートされていません。Firebaseはそのルールを制御しません。
- アサーションを行う前に
chai.setFirebaseAuthToken()
に認証トークンを渡して呼び出します。
アサーションには、4つの新しいフラグと1つの新しいメソッドがあります。
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オブジェクトです。書き込みテストでは、リファレンスに書き込みを試行するオブジェクトを提供できます(検証ルールなどをテストする場合)。
return expect({ uid: 'metropolis:robotmaria'}).cannot.write(true)
.to.ref(root.child('city/agitation'));
次のルールが適用されます。
- 期待オブジェクトが
null
の場合、アサーションは、非認証ユーザーを意味するものと想定します。 null
以外のすべてのユーザーオブジェクトは、uid
の値を提供する必要があります。- トークンを管理者トークンにするには、
admin: true
を設定します。この定義では、どのテストも必ず合格することに注意してください。
ドキュメント
APIドキュメントはこちら
警告
煩雑なFirebaseコンソールメッセージをキャプチャするため、このライブラリはconsole.log()
、console.warn()
、console.error()
をモンキーパッチします。効果はまちまちで、法律で禁止されている場合は無効になります。