grpc
ne parvient pas à se connecter même lorsque je règle ma fonction asynchrone test()
sur une limite de 100 000 ms avant qu'elle n'expire.
// terminal, after running jest --watch
● creates new record
14 UNAVAILABLE: failed to connect to all addresses
at Object.<anonymous>.exports.createStatusError (node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (node_modules/grpc/src/client_interceptors.js:1209:28)
at InterceptingListener.Object.<anonymous>.InterceptingListener._callNext (node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.Object.<anonymous>.InterceptingListener.onReceiveStatus (node_modules/grpc/src/client_interceptors.js:618:8)
at callback (node_modules/grpc/src/client_interceptors.js:847:24)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 skipped, 2 total
Snapshots: 0 total
Time: 106.03s, estimated 116s
Ran all test suites related to changed files.
Watch Usage: Press w to show more.
owner@G700:~/PhpstormProjects/shopify/bu
FAIL functions/src/classes/__tests__/FirestoreConnection.test.ts (108.991s)
✕ creates new record (100029ms)
○ skipped
● creates new record
: Timeout - Async callback was not invoked within the 100000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 100000ms timeout specified by jest.setTimeout.Error:
51 |
52 |
> 53 | test("creates new record", async () => {
| ^
54 | const addedDocument = await db
55 | .createNew(RecordTypes.globalRule, {
56 | storeId : "dummyStoreId"
at new Spec (node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
at Object.<anonymous> (functions/src/classes/__tests__/FirestoreConnection.test.ts:53:1)
● creates new record
14 UNAVAILABLE: failed to connect to all addresses
at Object.<anonymous>.exports.createStatusError (node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (node_modules/grpc/src/client_interceptors.js:1209:28)
at InterceptingListener.Object.<anonymous>.InterceptingListener._callNext (node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.Object.<anonymous>.InterceptingListener.onReceiveStatus (node_modules/grpc/src/client_interceptors.js:618:8)
at callback (node_modules/grpc/src/client_interceptors.js:847:24)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 skipped, 2 total
Snapshots: 0 total
Time: 111.16s
Ran all test suites related to changed files.
// FirebaseConnection.ts, inside the class
protected async addDocument(collectionName: string, documentData: object): Promise<firestore.DocumentSnapshot|null> {
try {
const newlyAddedDocument = await this.database
.collection(collectionName)
.add(documentData);
return await newlyAddedDocument.get();
}
catch (e) {
console.log(e, `=====error=====`);
return null;
}
}
// --------------- Public Methods
public async createNew(type: RecordTypes, documentData: object): Promise<firestore.DocumentSnapshot|null> {
this.verifySchemaIsCorrect(type, documentData);
const collectionName = this.getCollectionName(type);
return await this.addDocument(collectionName, documentData);
}
// FirebaseConnection.test.ts
import * as firebaseTesting from "@firebase/testing";
import {RecordTypes} from "../../../../shared";
import FirestoreConnection from "../FirestoreConnection";
/* * * * * * * * * * * * * * * * * * * * *
Setup
* * * * * * * * * * * * * * * * * * * * */
const createTestDatabase = (credentials): any => {
return firebaseTesting
.initializeTestApp({
projectId: 'testProject',
auth: credentials
})
.firestore();
};
const nullAllApps = firebaseTesting
.apps().map(app => app.delete());
const db = new FirestoreConnection('testShopDomain', createTestDatabase(null));
/* * * * * * * * * * * * * * * * * * * * *
Tests
* * * * * * * * * * * * * * * * * * * * */
test("creates new record", async () => {
const addedDocument = await db
.createNew(RecordTypes.globalRule, {
storeId : "dummyStoreId"
, globalPercent : 40
});
expect(addedDocument).toEqual({
storeId : "dummyStoreId"
, globalPercent : 40
, badProp : 0
});
}, 100000);
Quelqu'un est-il capable de dire pourquoi cela se produit? En regardant la documentation, cela semble être une bibliothèque de niveau inférieur: https://grpc.github.io/grpc/node/
Mise à jour
Après avoir suggéré que le serveur/émulateur n'a pas été trouvé par gRPC, j'ai exécuté firebase serve --only functions,firestore
. Le terminal a montré des émulateurs fonctionnant sur différents ports pour les deux services. Réexécution de jest --watch
produit maintenant une erreur légèrement différente:
2 UNKNOWN:
at Object.<anonymous>.exports.createStatusError (node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (node_modules/grpc/src/client_interceptors.js:1209:28)
at InterceptingListener.Object.<anonymous>.InterceptingListener._callNext (node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.Object.<anonymous>.InterceptingListener.onReceiveStatus (node_modules/grpc/src/client_interceptors.js:618:8)
at callback (node_modules/grpc/src/client_interceptors.js:847:24)
Les fonctions Firebase cachaient l'erreur sous-jacente. Cela a été résolu en 2 étapes: