chai-fireproof

Build Status

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()をモンキーパッチします。効果はまちまちで、法律で禁止されている場合は無効になります。