#node.js #firebase #google-cloud-firestore
#node.js #firebase #google-облако-firestore
Вопрос:
Я использую Firebase admin с Node Express для обновления документов Firestore из Appengine. У меня есть несколько тестов, которые я хочу провести с помощью эмулятора 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.
Перед каждым тестом я звоню:
var serviceAccount = require(process.env.FIREBASE_SA_CREDENTIAL);
firebaseAdmin.initializeApp({
credential: admin.credential.cert(serviceAccount),
projectId: 'test-project'
});
И в тесте используется класс, который просто обращается к Firestore следующим образом:
this.db = firebaseAdmin.firestore();
...
У меня есть следующие зависимости от npm:
"@google-cloud/firestore": "^4.7.1",
"firebase": "^8.0.2",
"firebase-admin": "^9.4.1"
"firebase-tools": "^8.16.2"
Я запускаю эмуляторы и запускаю тесты с:
firebase emulators:exec 'jest --verbose=false'
Я не вижу, что неверно в конфигурации — насколько я вижу, эмулятор должен принимать все аутентификации. Сообщение об ошибке предполагает, что он использует некоторую интерфейсную библиотеку, а не серверную библиотеку, но все зависимости кажутся правильными.
Комментарии:
1. Из любопытства, используете ли вы рендеринг на стороне сервера? Я обнаружил, что у меня возникла эта проблема, и когда я удалил функцию SSR, я смог запустить ее, как ожидалось.
Ответ №1:
Хорошо, решено. В конфигурации jest отсутствовала важная строка:
module.exports = {
testEnvironment: 'node'
}
Тестовая среда: ‘узел’. Это вызывало некоторое поведение в библиотеках Firebase, которое заставляло их думать, что среда была браузером.