Как макетировать функцию в редукторе, используя шутку
У меня есть редуктор, который говорит что-то вроде этого:
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);
Надеюсь это поможет.