无法通过 Firestore 模拟器进行身份验证

Mic*_*ear 1 node.js firebase google-cloud-firestore

我正在使用带有 Node + Express 的 Firebase 管理员从 Appengine 更新 Firestore 文档。我有一些我想使用 Firestore 模拟器进行的测试。这是我得到的错误:

Error in post /requests Error: {"servicePath":"localhost","port":8080,
"clientConfig":{},"fallback":true,"sslCreds":{"callCredentials":{}},
"projectId":"test-project","firebaseVersion":"9.4.1","libName":"gccl",
"libVersion":"4.7.1 fire/9.4.1","ssl":false,
"customHeaders":{"Authorization":"Bearer owner"},"scopes":[
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/datastore"
]}
You need to pass auth instance to use gRPC-fallback client in browser. Use OAuth2Client from google-auth-library.
Run Code Online (Sandbox Code Playgroud)

在每次测试之前,我打电话:

var serviceAccount = require(process.env.FIREBASE_SA_CREDENTIAL);
firebaseAdmin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    projectId: 'test-project'
});
Run Code Online (Sandbox Code Playgroud)

并且测试正在使用一个简单地访问 Firestore 的类,如下所示:

this.db = firebaseAdmin.firestore();
...
Run Code Online (Sandbox Code Playgroud)

我有以下 npm 依赖项:

"@google-cloud/firestore": "^4.7.1",
"firebase": "^8.0.2",
"firebase-admin": "^9.4.1"
"firebase-tools": "^8.16.2"
Run Code Online (Sandbox Code Playgroud)

我正在启动模拟器并运行测试:

firebase emulators:exec 'jest --verbose=false'
Run Code Online (Sandbox Code Playgroud)

我看不到配置中有什么不正确 - 据我所知,模拟器应该接受所有身份验证。该错误消息表明它正在使用某个前端库而不是后端库,但依赖项似乎都是正确的。

Mic*_*ear 5

好的,解决了。jest 配置中缺少重要的一行:

module.exports = {
  testEnvironment: 'node'
}
Run Code Online (Sandbox Code Playgroud)

测试环境:'节点'。这触发了 Firebase 库中的一些行为,使他们认为环境是一个浏览器。