Ember/Emberfire + Firebase 3 验收测试

Ember/Emberfire + Firebase 3 Acceptance Test

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

中使用以下内容
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 库中的测试助手之后模拟会话,以允许我的应用程序正确获取所需的数据,因为我的 firebase 层次结构如下: / +--uid +--个人资料 +--其他数据

我没有测试权限规则,只是与应用程序中的 save/edit 数据进行交互,这在 firebase 3 迁移之前工作正常。在版本 3 之后,我的所有测试 returns 如下:

    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 的事实非常令人费解。也许我需要重新设计测试?或者我一直错误地处理这个问题?非常感谢任何输入

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

新的 firebase InitializeApp method has an additional optional parameter called name. By default, Emberfire service 将此名称设置为:

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

然而,Emberfire test helper 创建 firebase 离线引用将具有不同实例名称的 firebase 实例存根为:

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

这导致我的测试失败 permission denied,因为验收测试正在尝试连接到“[EmberFire default app]”并且存根的离线引用被称为某物否则。

创建我自己的 create-offline-ref 助手,将 DEFAULT_NAME 替换为“[EmberFire default app]”即可解决问题。我不确定什么是验收测试的最佳实践,因为更改似乎是故意在 emberfire 上进行的。