在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这一事实令人非常困惑。也许我需要重新设计测试?或者我一直错误地接近这个?非常感谢任何输入
答案 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默认应用程序]'解决了这个问题。我不确定接受测试的最佳做法是什么,因为这个变化似乎是故意的咒语。