在模拟器上使用Firebase-functions-test

时间:2019-11-11 03:55:00

标签: firebase-realtime-database google-cloud-functions firebase-admin

我正在尝试为我的CI创建一个自动化测试,将我的云功能与本地仿真器连接起来。我正在使用firebase-functions-test和firebase-admin sdk。虽然我的测试在本地通过,但在使用测试docker容器时失败。我创建了一个测试来说明。

const databaseName = 'foo';
const test = require('firebase-functions-test')({
  databaseURL: "http://localhost:9000?ns=" + databaseName
});
describe('test', () => {
  it('tests', async () => {
    const admin = require('firebase-admin')
    admin.initializeApp();
    return await admin.database().ref('bar').push('baz')
  })
})

上面的测试会反复发出警告:

@firebase/database: FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the \"credential\" property failed to fetch a valid Google OAuth2 access token with the following error: \"Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal metadata.google.internal:80. Error code: ENOTFOUND\"."}

我怀疑它与~/.config/gcloud/application_default_credentials.json有关,但是我真的不明白为什么模拟器会检查gcloud凭据。

任何建议都将受到赞赏,谢谢!

1 个答案:

答案 0 :(得分:0)

此问题先前已在官方Firebase Github上解决,请参见here

  

可能的原因包括:

     
      
  1. 时钟不同步(很可能是因为您仅在一个环境中看到此情况)
  2.   
  3. 服务帐户和数据库URL用于两个不同的项目
  4.