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

859
Vistas
How to reset or clear a spy in Jest?

I have a spy that is used in multiple assertions across multiple tests in a suite.

How do I clear or reset the spy so that in each test the method that the spy intercepts is considered not to have been invoked?

For example, how to make the assertion in 'does not run method' be true?

const methods = {
  run: () => {}
}

const spy = jest.spyOn(methods, 'run')

describe('spy', () => {
  it('runs method', () => {
    methods.run()
    expect(spy).toHaveBeenCalled() //=> true
  })

  it('does not run method', () => {
    // how to make this true?
    expect(spy).not.toHaveBeenCalled() //=> false
  })
})
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Thanks to @sdgluck for the answer, though I would like to add to this answer that in my case, I wanted a clear state after each tests since I have multiple tests with same spy. So instead of calling the mockClear() in previous test(s), I moved it into the afterEach() (or you can use it with beforeEach) like so:

afterEach(() => {    
  jest.clearAllMocks();
});

And finally, my tests are working like they should without the spy being called from previous test. You can also read their documentation for it

Option 2

If you wish to do it from a global level, you could also updated your jest.config.js (or from package.json)

module.exports = {
  clearMocks: true,
  // ...
}

You can read Jest documentation about it

over 4 years ago · Santiago Trujillo Denunciar

0

Jest spies have the same API as mocks. The documentation for mocks is here and specifies a method mockClear which:

Resets all information stored in the mockFn.mock.calls and mockFn.mock.instances arrays.

Often this is useful when you want to clean up a mock's usage data between two assertions.

(emphasis my own)

So we can use mockClear to "reset" a spy. Using your example:

const methods = {
  run: () => {}
}

const spy = jest.spyOn(methods, 'run')

describe('spy', () => {
  it('runs method', () => {
    methods.run()
    expect(spy).toHaveBeenCalled() //=> true
    /* clean up the spy so future assertions
       are unaffected by invocations of the method
       in this test */
    spy.mockClear()
  })

  it('does not run method', () => {
    expect(spy).not.toHaveBeenCalled() //=> true
  })
})

Here is an example in CodeSandbox.

over 4 years ago · Santiago Trujillo Denunciar

0

In case you want to restore the original behavior of a method you had previously added to a spy, you can use the mockRestore method.

Check out the example bellow:

class MyClass {
    get myBooleanMethod(): boolean {
        return true;
    }
}

const myObject = new MyClass();
const mockMyBooleanMethod = jest.spyOn(myObject, 'myBooleanMethod', 'get');
// mock myBooleanMethod to return false
mockMyBooleanMethod.mockReturnValue(false);
// restore myBooleanMethod to its original behavior
mockMyBooleanMethod.mockRestore();
over 4 years ago · Santiago Trujillo 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