我正在尝试为我的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凭据。
任何建议都将受到赞赏,谢谢!
答案 0 :(得分:0)
此问题先前已在官方Firebase Github上解决,请参见here。
可能的原因包括:
- 时钟不同步(很可能是因为您仅在一个环境中看到此情况)
- 服务帐户和数据库URL用于两个不同的项目