es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

process.env.FIREBASE_CONFIG está indefinido cuando se ejecutan todas las pruebas unitarias juntas.

Cuando ejecuto todas mis pruebas juntas, la llamada “makeDocumentSnapshot” produce el error “SyntaxError: Token inesperado u en JSON en la posición 0” en “firebase-functions-test/lib/app.js:41:65”, lo cual básicamente significa que “process.env.FIREBASE_CONFIG” está indefinido. Sin embargo, si solo ejecuto la prueba individualmente, pasa.

Mi estructura de archivos:

src
 |-- foo
      |-- index.ts
      |-- foo.ts
 |-- index.ts
test
 |-- test.ts
 |-- foo
      |-- foo.test.ts
package.json { "test": "mocha -r ts-node/register test/*/.test.ts" }
// index.ts

import * as admin from 'firebase-admin';

admin.initializeApp();
admin.firestore().settings({ ignoreUndefinedProperties: true });

export * as foo from './foo/index';
// test.ts

import Test from 'firebase-functions-test';

export default Test({ databaseURL, storageBucket, projectId }, 'test/service-account-key.json');
// foo.test.ts

import test from '../test';
import * as myFunctions from '../../src/index';

describe('foo()', () => {
  const wrapped = test.wrap(myFunctions.foo.foo);

  it ('should do this', async () => {
    // Esta línea produce un error cuando ejecuto todas las pruebas juntas, 
    // pero no cuando ejecuto esta prueba individualmente con describe.only().
    const snapshot = test.firestore.makeDocumentSnapshot(...) 
    ...
  });
});
Tags:  ,

Answer

  1. Avatar for davy.ai

    Problema con la llamada a makeDocumentSnapshot en las pruebas de mocha.js en Google Cloud Firestore

    Al ejecutar todas las pruebas juntas, la llamada a la función makeDocumentSnapshot produce un error: SyntaxError: Token inesperado u en JSON en la posición 0. Este error ocurre porque process.env.FIREBASE_CONFIG está indefinido. Sin embargo, al ejecutar la prueba individualmente con describe.only() se aprueba.

    En la estructura de archivos, index.ts inicializa y exporta el módulo foo. En foo.test.ts, la función foo se envuelve con test.wrap(), y la llamada a la función makeDocumentSnapshot está causando un error.

    Para solucionar el problema, es necesario definir la variable process.env.FIREBASE_CONFIG antes de ejecutar las pruebas juntas. Una solución alternativa es definir la variable en el archivo test.ts. Otra solución es usar un paquete como dotenv para cargar las variables de entorno.

    // test.ts
    
    import Test from 'firebase-functions-test';
    import * as dotenv from 'dotenv';
    
    dotenv.config(); // cargar variables de entorno
    
    export default Test({ databaseURL, storageBucket, projectId }, 'test/service-account-key.json');
    

    Además, asegúrese de que la llamada a makeDocumentSnapshot esté utilizando argumentos válidos y no esté causando el error. Ejecutar la prueba individualmente con describe.only() puede ayudar a aislar el problema.

    // foo.test.ts
    
    import test from '../test';
    import * as myFunctions from '../../src/index';
    
    describe('foo()', () => {
      const wrapped = test.wrap(myFunctions.foo.foo);
    
      it ('debería hacer esto', async () => {
        const snapshot = test.firestore.makeDocumentSnapshot({}, 'foo/bar');
        expect(snapshot).to.exist;
        ...
      });
    });
    

    Al definir process.env.FIREBASE_CONFIG y verificar la llamada a makeDocumentSnapshot, el error debería resolverse al ejecutar todas las pruebas juntas.

Comments are closed.