【问题标题】:Ember/Emberfire + Firebase 3 Acceptance TestEmber/Emberfire + Firebase 3 验收测试
【发布时间】:2016-06-30 05:27:52
【问题描述】:

在 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 +--简介 +--其他数据

我不是在测试权限规则,只是在应用程序中保存/编辑数据的交互,这在 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 的事实非常令人困惑。也许我需要重新设计测试?还是我一直错误地处理这个问题?非常感谢任何输入

【问题讨论】:

  • 有根据的猜测:您是否在新的 Firebase 控制台 (firebse.google.com) 中创建了一个项目。如果是这样的话,新数据库的安全规则与之前的项目不同。请参阅firebase.google.com/docs/database/android/save-data 上的第一个蓝色框。
  • 是的,我已将项目迁移到新控制台。即使我在迁移的项目上使用 v2 接口,测试也可以正常运行。但是我们想利用 firebase 的新存储功能,因此迁移到 v3。我做了一些挖掘,我认为这个错误与 replaceAppRef 在所有情况下都没有替换引用有关,但我可能是错的。

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


【解决方案1】:

到此为止,我想我会回答我自己的问题,以防其他人遇到与我相同的问题。

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

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

但是,Emberfire test helper 用于创建 firebase 离线 ref 将具有不同实例名称的 firebase 实例存根为:

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

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

创建我自己的 create-offline-ref 帮助程序,将 DEFAULT_NAME 替换为“[EmberFire 默认应用程序]”可以解决问题。我不确定验收测试的最佳做法是什么,因为更改似乎是在 emberfire 上刻意进行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2015-10-25
    • 2017-07-27
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多