Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

224
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!