Как проверить экземпляр класса внутри функции с помощью Jest - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующий гипотетический сценарий:

// file MyClass.js in an external package
class MyClass {
    myfunc = () => {
        // do something
    }
}

// file in my project
function myFunctionToBeTested() {
    const instance = new MyClass()
    instance.myFunc()
}

Мне нужно создать тест с Jest, чтобы убедиться, что instance.myFunc был назван

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

вы можете смоделировать класс и назначить экспорт этого файла по умолчанию для переменной следующим образом:

jest.mock('../../utils/api/api');
const FakeClass = require('../someFile.js').default;

, а затем получить доступ к вызовам функции вашего класса-макета следующим образом:

FakeClass.prototype.myFunc.mock.calls
0 голосов
/ 17 мая 2018

Один из вариантов - заменить модуль MyClass на импровизированную реализацию

const mockmyfunc = jest.fn()
jest.mock("path/to/external/package/MyClass", () => {
  return jest.fn().mockImplementation(() => {
    return {myfunc: mockmyfunc}
  })
})

А затем напишите следующий тест

it("Test myfunc called in functionToBeTested", () => {
  functionToBeTested()
  expect(mockmyfunc).toHaveBeenCalled()
})

Обратите внимание, что это не единственный способ, вы можете погрузиться в https://facebook.github.io/jest/docs/en/es6-class-mocks.html для других альтернатив.

Обновление

Если myfunc будет реальной функцией (что, я думаю, не вариант, так как это внешний пакет?)

export class MyClass {
    myFunc() {
      // do smth
    }
}

и вам не нужно будет заменять реализацию, вы можете использовать Jest's Autock

import MyClass from "path/to/external/package/MyClass"
jest.mock("path/to/external/package/MyClass")

it("Test myfunc called in functionToBeTested", () => {
  functionToBeTested()
  const mockMyFunc = MyClass.mock.instances[0].myFunc
  expect(mockMyFunc).toHaveBeenCalled()
})
...