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 物件建立斷言。請注意,這些會回傳 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()。您的使用情況可能有所不同,在法律禁止的地方無效。