Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
¿Cómo simular un conjunto de Firebase () con Sinon?

Estoy tratando de probar este código de acceso de Firebase

 let writeHomePromise = admin .database() .ref( "sm_matches/" + match.date + "/" + match.homeTeam.name + "/homeNGSPlayers" ) .set(match.homePlayers);

utilizando Sinón.

Creo una coincidencia con

 const match = { 'date' : '2902199', 'homeTeam' : '{"name" : "My_team"}', 'homePlayers' : ["Nomran Mailer", "Peter Bonetti"], 'awayPlayers': ["Ernst Blofeld", "Postman Pat"], };

Y estoy intentando, sin éxito, burlarme de ese código con

 let refStub = sinon.stub(); let setStub = sinon.stub(); refStub.withArgs('sm_matches/2902199/My_team/homeNGSPlayers').returns( {push: () => ({key: 'fakeKey', set: setStub})} );

lo que me da TypeError: Cannot read property 'set' of undefined .

Esta es mi primera incursión en Sinon, e incluso algo tan simple me está dando problemas.

¿Qué estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que debe llamar a admin.initializeApp() antes de usar cualquiera de los servicios de Firebase. El siguiente ejemplo utiliza la estrategia de prueba del modo fuera de línea.

Escriba pruebas unitarias aisladas y fuera de línea sin efectos secundarios. Esto significa que cualquier llamada a método que interactúe con un producto de Firebase (p. ej., escribir en la base de datos o crear un usuario) debe cerrarse. Por lo general, no se recomienda usar el modo fuera de línea si tiene funciones de Cloud Firestore o Realtime Database, ya que aumenta considerablemente la complejidad de su código de prueba.

Pruebe métodos de código auxiliar como este:

index.js :

 const admin = require('firebase-admin'); admin.initializeApp(); function main() { const match = { date: '2902199', homeTeam: { name: 'My_team' }, homePlayers: ['Nomran Mailer', 'Peter Bonetti'], awayPlayers: ['Ernst Blofeld', 'Postman Pat'], }; return admin .database() .ref('sm_matches/' + match.date + '/' + match.homeTeam.name + '/homeNGSPlayers') .set(match.homePlayers); } module.exports = main;

index.test.js :

 const sinon = require('sinon'); const admin = require('firebase-admin'); describe('71267791', () => { it('should pass', async () => { const adminInitStub = sinon.stub(admin, 'initializeApp'); const databaseService = { ref: sinon.stub().returnsThis(), set: sinon.stub(), }; const databaseStub = sinon.stub().returns(databaseService); Object.defineProperty(admin, 'database', { get: () => databaseStub }); const main = require('./'); await main(); sinon.assert.calledOnce(adminInitStub); sinon.assert.calledOnce(admin.database); sinon.assert.calledWithExactly(databaseService.ref, 'sm_matches/2902199/My_team/homeNGSPlayers'); sinon.assert.calledWithExactly(databaseService.set, ['Nomran Mailer', 'Peter Bonetti']); }); });

Resultado de la prueba:

 71267791 ✓ should pass (655ms) 1 passing (661ms) ----------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ----------|---------|----------|---------|---------|------------------- All files | 100 | 100 | 100 | 100 | index.js | 100 | 100 | 100 | 100 | ----------|---------|----------|---------|---------|-------------------

versiones del paquete:

 "firebase-admin": "^10.0.2",
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda