Ember / Emberfire + Firebase 3验收测试

时间:2016-06-30 05:27:52

标签: ember.js firebase firebase-authentication firebase-security emberfire

在firebase 3更新之前,我们的验收测试一直在运行,没有任何问题。我们在 beforeTest afterTest

中使用以下内容
moduleForAcceptance('Acceptance | Dashboard | Items | Library | New', {
  beforeEach() {
    stubFirebase();
    var ref = createOfflineRef(basicDataRef, 'https://MY-APP.firebaseio.com');
    replaceAppRef(this.application, ref);
    stubValidSession(this.application, {uid: 'xxxx'});
  },
  afterEach() {
    unstubFirebase();
  }
});

basicDataRef是测试的固定装置。上面的代码允许我在torii库中的test-helper之后模拟会话,以允许我的应用程序正确获取所需的数据,因为我的firebase hieararchy如下:     /     + - UID        + - 简介        + - otherdata

我没有测试权限规则,只是在应用程序中保存/编辑数据的交互,这在firebase 3迁移之前已经正常工作。在版本3之后,我的所有测试都会返回以下内容:

    actual: >
        false
    expected: >
        true
    stack: >
            at http://localhost:7357/assets/test-support.js:4130:12
            at exports.default._emberTestingAdaptersAdapter.default.extend.exception (http://localhost:7357/assets/vendor.js:49473:7)
            at onerrorDefault (http://localhost:7357/assets/vendor.js:41461:24)
            at Object.exports.default.trigger (http://localhost:7357/assets/vendor.js:62212:11)
            at http://localhost:7357/assets/vendor.js:63463:40
            at Queue.invoke (http://localhost:7357/assets/vendor.js:10415:16)
    message: >
        Error: permission_denied at /xxxx/profile: Client doesn't have permission to access the desired data.

我一直以为emberfire中的createOfflineRef允许我们绕过规则检查。它不断返回permission_denied这一事实令人非常困惑。也许我需要重新设计测试?或者我一直错误地接近这个?非常感谢任何输入

1 个答案:

答案 0 :(得分:1)

了解到这一点,我想我会回答我自己的问题,以防其他人遇到与我相同的问题。

新的firebase InitializeApp 方法有一个名为 name 的附加可选参数。默认情况下,Emberfire service将此名称设置为:

export const DEFAULT_NAME = '[EmberFire default app]';

但是,创建firebase offline的Emberfire test helper将使用不同的实例名称将firebase实例存根为:

export const DEFAULT_NAME = '[EmberFire offline test app]';

这会导致我的测试因权限被拒绝而失败,因为验收测试试图连接到'[EmberFire默认应用程序]',并且存根脱机引用被称为其他内容。

创建我自己的create-offline-ref帮助器,将DEFAULT_NAME替换为'[EmberFire默认应用程序]'解决了这个问题。我不确定接受测试的最佳做法是什么,因为这个变化似乎是故意的咒语。