Jest mocking - mock действительно запускается и возвращается, но toHaveBeenCalledTimes равно 0 - PullRequest
0 голосов
/ 14 февраля 2020

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

Макет getFile возвращает '12345', как и ожидалось во втором тесте, но toHaveBeenCalledTimes(1) ложно (получено количество вызовов: 0). Это почему? Я подозреваю, что между тестами происходит какое-то состояние. Я хотел бы получить пример, как решить эту проблему.

getFile - это функция, которая должна возвращать объект с ticketId (строка) и файлами (массив)

Вот мой тест

const fileServiceMocker = ({ ticketId = '1337' }) => {
  const mockTicketId = ticketId
  const mockGetFile = jest.fn().mockImplementation(() => {
    return {
      files: [],
      ticketId: mockTicketId
    }
  })

  jest.mock('fileService', () => {
    return {
      getFile: mockGetFile,
      uploadToBucket: jest.fn()
    }
  })

  // File to be tested
  processService = require('processService')

  return { getFile: mockGetFile }
}

beforeEach(() => {
  jest.resetAllMocks()
})

describe('test the things', () => {
  it('should call getFile once', async () => {
    const { getFile } = fileServiceMocker({})
    await processService.processZip(bucketsMock, jobMock, null)
    expect(getFile).toHaveBeenCalledTimes(1)
  })

  it('should throw if ticket id is null', async () => {
    const { getFile } = fileServiceMocker({ ticketId: '12345' })
    await processService.processZip(bucketsMock, jobMock, null)

    // HERE - the results of getFile is 12345 but this still fails
    expect(getFile).toHaveBeenCalledTimes(1)
  })
})
...