Búsqueda de sitios web

node.js - Jasmine: Probar si un método es llamado por otro método de otra clase


Tengo 2 clases como se indica a continuación

class B {
  public b() { return 1 }
}

class A {
  b: B = new B()
  public run() { return this.b.b() }
}

Intenté usar la siguiente prueba para probar el método b() de la clase B, pero la prueba no está funcionando

describe('A spy', () => {
  let a: A
  let b: B

  beforeEach(() => {
    a = new A()
    b = new B()
    spyOn(b, 'b')

    a.run()
  })

  it('tracks that the spy was called', () => {
    expect(b.b).toHaveBeenCalled()
  })
})

¿Entendí mal el concepto de pruebas de Jasmine? También probé `jasmine.createSpy`, y tampoco funciona

P.D. intenté probarlo manualmente y confirmé que se había llamado al método b() de la clase B

Respuesta #1

La variable b no se usa en ningún lugar, no es el mismo objeto que this.b dentro de a, por lo que b.b no se llama.

Debería ser:

a = new A()
spyOn(a.b, 'b')
a.run()

expect(a.b.b).toHaveBeenCalled()