0

在 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 库中的 test-helper 之后模拟会话,以允许我的应用程序正确获取所需的数据,因为我的 firebase 层次结构如下:/ +--uid +--profile +--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 的事实非常令人困惑。也许我需要重新设计测试?还是我一直错误地处理这个问题?非常感谢任何输入

4

1 回答 1

1

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

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

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

但是,用于创建 firebase 脱机 ref 的Emberfire 测试帮助程序将具有不同实例名称的 firebase 实例存根为:

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

这会导致我的测试因权限被拒绝而失败,因为验收测试正在尝试连接到“[EmberFire 默认应用程序]”并且存根的离线引用被称为其他东西。

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

于 2016-07-28T00:27:09.007 回答