Я пытаюсь SpyOn функцию внутри reactJS функционального компонента. Я видел несколько ответов и узнал о процедуре передачи функций в качестве подпорки нашему компоненту. Но этот метод не работает для меня. Поэтому я попытался использовать const spy = jest.spyOn(App.prototype, "sampleFunctionName");
Как и ожидалось, он выдает ошибку, говоря, что sampleFunctionName
не определено, поскольку App.prototype не содержит его. Чтобы преодолеть это, я добавил sampleFunctionName
в App.prototype как App.prototype.sampleFunctionName = jest.fn()
и попытался шпионить за ним как
wrapper = shallow(<App {...props} />);
wrapper.find("#btn-id").simulate("click")
expect(spy).toHaveBeenCalled()
Теперь проблема в том, что количество вызовов шпиона всегда равно нулю. Поэтому я хотел бы знать, является ли то, что я пробовал, правильным, или каким-либо другим способом шпионить за функцией внутри бесклассового компонента
Вот пример, демонстрирующий вышеупомянутое требование:
function App(props){
function save(){
//contains the code for api calls and store changes
}
return(
<Button id = "btn-id" onClick = {save}>Name</Button>
)
}
И тестовый файл будет выглядеть так:
import React from "react";
import { shallow } from "enzyme";
import {App} from './App'
describe('desc',() =>{
...
const spy = jest.spyOn(App.prototype, "save");
//using the above spy says "save" is undefined so added this line before using spy
// App.prototype.save = jest.fn()
wrapper = shallow(<App {...props} />);
wrapper.find("#btn-id").simulate("click")
expect(spy).toHaveBeenCalled()
})