【问题标题】:Using Firebase DB Emulators, how to clear database between tests and avoid PERMISSION_DENIED?使用 Firebase DB Emulators,如何在测试之间清除数据库并避免 PERMISSION_DENIED?
【发布时间】:2021-11-11 17:49:12
【问题描述】:

我正在按照本指南设置 Firebase 模拟器来测试我的实时数据库安全规则:https://firebase.google.com/docs/emulator-suite/connect_rtdb#clear_your_database_between_tests

在“在测试之间清除您的数据库”中,它建议这样做:

firebase.database().ref().set(null);

但是,我的安全规则阻止我的应用这样做。

这是我的代码:


import * as firebase from '@firebase/testing';
import fs from 'fs';

const app = firebase.initializeTestApp({
  databaseName: 'myDb',
  auth: {
    uid: 'myuid',
  },
});

describe('test', () => {
  beforeEach(async () => {
    await firebase.loadDatabaseRules({
      databaseName: 'mydb',
      rules: fs.readFileSync('database.rules.json', 'utf8'),
    });
    
    await app.database().ref().set(null) // This line throws a permission denied error
  });

  afterAll(async () => {
    await Promise.all(firebase.apps().map((app) => app.delete()));
  });

  it('test', async (done) => {
    // ... //
  });
}

如何在测试之间重置数据库?

【问题讨论】:

    标签: javascript firebase-realtime-database firebase-security firebase-tools


    【解决方案1】:

    找到解决方案here

    我需要使用

    firebase.initializeAdminApp({ databaseName: "myDb" });
    

    创建一个作为管理员身份验证的应用程序。然后我可以在每次测试之间重置数据库:

      const app = firebase.initializeTestApp({
        databaseName: 'myDb',
        auth: {
          uid: 'myuid',
        },
      });
      const adminApp = firebase.initializeAdminApp({ databaseName: "myDb" });
      let backup;
    
      beforeEach(async () => {
        await firebase.loadDatabaseRules({
          databaseName: 'myDb',
          rules: fs.readFileSync('database.rules.json', 'utf8'),
        });
        await adminApp
          .database()
          .ref('/')
          .once('value')
          .then((v) => {
            backup = v.val();
          })
      });
    
      afterEach(async ()=>{
        await adminApp.database().ref('/').set(backup);
      })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      相关资源
      最近更新 更多