Я использую ручной макет для модуля. Я хочу очистить издевательскую функцию в ручном макете, а макет вернуть для нее новое значение. Как я могу это сделать? Я пробовал много способов, но всегда возвращал значение в ручном макете.
Я использую jest.clearAllMocks() и jest.resetAllMocks() в beforeEach и использую mockReturnValue, чтобы имитировать новое значение для этой функции, но оно не меняется.
Это мой ручной макет
const firebase = {};
firebase.storage = {
bucket: jest.fn(),
upload: jest
.fn()
.mockResolvedValue([
{ getSignedUrl: jest.fn().mockResolvedValue(["link"]) }
]),
file: _ => ({
delete: jest.fn()
})
};
module.exports = firebase;
Я получаю значение link, но не могу имитировать другие значения в своем модульном тесте
Это зависит от того, как вы реализуете "ручной макет". Jest называет их «ручными моками», но на самом деле это не моки, а подделки, то есть альтернативные реализации. Если ваша реализация не реализована с использованием имитационных функций, предоставляемых Jest (jest.fn() f.e.), вызов jest.clearAllMocks() и jest.resetAllMocks() не оказывает на нее никакого влияния.
Я знаю. Если я имитирую возвращаемое значение в ручных моках, я могу получить значение в функциях, которые я называю этими моками. Когда я использую clearAllMocks и имитирую новое значение в модульном тесте. Он по-прежнему использует старое значение.





Вам нужно использовать один из них для конкретного макета:
mockFn.mockClear(): удалит всю сохраненную информацию о вызове макетаmockFn.mockRestore(): то же самое, что и выше, плюс удаление фиктивных возвращаемых значений.mockImplementation: установить новое возвращаемое значение для макетаСуществует два способа создания экземпляра mockFn:
const mockFn = jest.fn()
или импортировав макет:
import mockFn from 'mockedModule'
jest.mock('mockedModule', ()=> jest.fn())
Пожалуйста, предоставьте stackoverflow.com/help/mcve для вашей проблемы. Я пробовал много способов - что вы пробовали?