Как сбросить или очистить шпиона в Jest? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть шпион, который используется в нескольких утверждениях в нескольких тестах в наборе.

Как очистить или сбросить шпиона, чтобы в каждом тесте метод, который перехватывает шпион, не вызывался?

Например, как сделать утверждение в 'does not run method' истинным?

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
  })
})

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Спасибо @sdgluck за ответ, хотя я хотел бы добавить к этому ответу, что в моем случае я хотел очистить состояние после каждого теста, так как у меня есть несколько тестов с одним и тем же шпионом. Поэтому вместо вызова mockClear() в предыдущих тестах я переместил его в afterEach() следующим образом:

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

И, наконец, мои тесты работают так, как должны, без вызова шпиона из предыдущего теста.

0 голосов
/ 17 ноября 2018

Шпионские шпионы имеют тот же API, что и макеты. Документация для макетов здесь и определяет метод mockClear, который:

Сбрасывает всю информацию, хранящуюся в массивах mockFn.mock.calls и mockFn.mock.instances.

Часто это полезно, когда вы хотите очистить данные использования макета между двумя утверждениями .

(выделение мое)

Таким образом, мы можем использовать mockClear для «сброса» шпиона. Используя ваш пример:

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
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...