Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
¿Cómo llegar a HaveBeenCalledTimes(9) con una función anidada en jasmine?

Estoy tratando de hacer una prueba unitaria para verificar si una función se llama un máximo de 9 veces, el siguiente código es una aproximación del código real:

 function method1( event ) { method2(event); } function method3( event ) { input.value += event.key; } function method2(event) { if (input.length < 9) method3(event); }

Como puede ver, se supone que el method3() se ejecuta solo 9 veces.

Esta es una aproximación también de la prueba de unidad que estoy tratando de hacer:

 it("method3 should be called 9 times",() => { spyOn(component.method1).and.callThrough; spyOn(component.method2).and.callThrough; spyOn(component.method3).and.callThrough; for (var i = 0; i < 20; i++) { component.method1(new KeyboardEvent('keydown', {key:'1'})); } expect(component.method1).toHaveBeenCalled(); expect(component.method2).toHaveBeenCalled(); expect(component.method3).toHaveBeenCalled(); expect(component.method3).toHaveBeenCalledTimes(9); // with this the TEST DON'T PASS! });

Después de ejecutar las pruebas, las pruebas fallan en toHaveBeenCalledTimes , porque dice: se esperaba que fueran 9 veces, se llamó 0 veces. No sé si la razón es porque es una función anidada.

Otra cosa que también ocurrió es que si hago: expect(component.method1).toHaveBeenCalledTimes(20) en lugar del (9) con el method3 , esa prueba PASS y se llama 20 veces.

¿Puedes ayudarme a resolver esto?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No está llamando al método callThrough() del espía. spyOn realiza una implementación falsa del método que desea espiar. Por lo tanto, su llamada al method2 y al method3 nunca ocurre desde el method1 .

and.callThrough() se usa para llamar al método real que está espiando.

En su caso, no está llamando al método callThrough() . En cambio, solo se está refiriendo a la función callThrough :

 spyOn(component.method1).and.callThrough();//Make the actual call

¿Por qué esta afirmación pasa spyOn(component.method1).toHaveBeenCalledTimes(20) ?

Está llamando al method1 1 20 veces en su ciclo for . Tenga en cuenta que está llamando a la implementación falsa 20 veces y su caso de prueba afirma: Oye, ¿este método se llama 20 veces?

Karma runner dice: Sí, se llama 20 veces (llamada de método falso o real, no le importa).

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda