Как макетировать функцию в редукторе, используя шутку

У меня есть редуктор, который говорит что-то вроде этого:

return {
        ...state,
        result: myResult(valA, valB)
}

и myResult функция определена в том же файле над редуктором

В настоящее время я получаю провальный тест, потому что значения, которые я передаю в myResult не определены

Как я могу издеваться над этой функцией, используя шутку?

Я знаю, что я могу сделать это:

const myMock = jest.fn()
myMock.mockReturnValueOnce(10)

но как конкретно указать тестовому файлу, какую именно функцию он должен смоделировать в основном файле?

Я чувствую, что хочу сделать что-то вроде

import { myResult } from './index'
myResult = jest.fn()
myResult.mockReturnValueOnce(someObject)

но я не уверен, что это сработает, потому что способ проверить редукторы состоит в том, чтобы иметь начальный объект, ожидаемый результат объекта и затем пройти через действие. тогда как функция, которую я хочу проверить, принадлежит ключу объекта результата в редукторе

Имеет ли это смысл?

1 ответ

Я обычно делаю следующее:

Сначала я высмеиваю свой объект, прежде чем требовать тестируемый класс:

jest.doMock('dependancy', () => {
    return {
        doSomething: () => {
            return {
                set: jest.fn(),
                get: jest.fn()
            };
        }
    };
});

Затем при выполнении я извлекаю параметр, передаваемый в макет, например

myObject.myFunction(extension);
expect(dependancy.get).toHaveBeenCalled();
const callback = dependancy.get.mock.calls[0][1];

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

callback(undefined, undefined);

Надеюсь это поможет.

Другие вопросы по тегам