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

214
Views
Jasmine en AngularJS: asegurando el número de llamadas a un método espiado

Tengo un servicio llamado MessageBarFactory , con un método void llamado addAlert() . Tengo una prueba unitaria en la que no quiero que se llame a ese método, así que solo lo espío de la siguiente manera:

 spyOn(MessageBarFactory, 'addAlert'); // And do nothing

En la rama del código base que estoy probando, hay dos llamadas consecutivas a este método:

 . . . MessageBarFactory.addAlert('Patient ' + $scope.patientIn.name.firstName + ....); MessageBarFactory.addAlert('An error occurred attempting to load the patient details ....); . . .

Para asegurarme de que se sigue esa rama, estoy probando para ver si ese método ha sido "llamado" dos veces:

 expect(MessageBarFactory.addAlert).toHaveBeenCalledTimes(2);

Pero recibo un mensaje que también involucra a otros espías míos en otros métodos del mismo servicio, como clearAlertByName :

 Error: <toHaveBeenCalledTimes> : Expected a spy, but got Object({ alerts: [ ], addAlert: spy on addAlert, closeAlert: Function, clearAll: Function, clearAlertByName: spy on clearAlertByName, clearAllExceptForWidget: Function, clearAlertByNameByType: Function }). . . .

Ahora, por supuesto, podría estar haciendo algo como:

 let counter = 0; spyOn(MessageBarFactory, 'addAlert').and.callFake( function(){ counter++; } ); . . . expect(counter).toEqual(2);

Pero esto es un poco antinatural y requiere que también coloque una función falsa, lo que aumenta la sobrecarga de tiempo de ejecución para el espía (no es el punto más importante dentro de un contexto de prueba, pero aún así).

Estoy buscando para ver si estoy pensando en esto mal: ¿ toHaveBeenCalledWithTimes() es incompatible con los métodos espiados? Yo pensaría que esta es exactamente la razón por la que querrías espiar un método. ¿Que me estoy perdiendo aqui? Como referencia, estoy usando Jasmine 3.1.0 y, lamentablemente, esto no es negociable para este proyecto, que tiene un gran enfoque en la compatibilidad con versiones anteriores.

about 4 years ago · Juan Pablo Isaza
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!