Как указано выше, причина в том, что функция не существует в ReactWrapper
, так как это всего лишь экземпляр вокруг визуализированного вывода. Кроме того, вы не можете проверить вызов функции так же, как в обычном компоненте, основанном на классе, так как он не является свойством класса, например Pulldown.displayUPC
.
Однако есть несколько способов проверить похожую функциональность:
Если возможно, сделайте так, чтобы компонент не имел скрытых зависимостей, и передайте ссылки на функции через реквизиты. Однако это не всегда возможно, если все ваши компоненты работают.
// PullDown.js
function PullDown({displayUPC}) {
return <button onClick={displayUPC} />;
}
export default PullDown;
// PullDown.spec.js
describe("Pulldown tab", () => {
let wrapperPulldown;
let displayUPC;
beforeEach(() => {
displayUPC = jest.fn();
});
// ... some tests
it("should be clickable", () => {
wrapperPulldown = shallow(<PullDown displayUPC={displayUPC} />);
wrapperPulldown.find("button").simulate("click");
expect(displayUPC).toBeCalled();
});
});
Другой способ добиться этого, если вы не можете позволить себе передать ссылку на функцию через реквизит, - это определить функцию вне компонента.
// PullDown.js
export const displayUPC = () => {};
function PullDown() {
return <button onClick={displayUPC} />;
}
export default PullDown;
// PullDown.spec.js
import * as pullDownModule from './PullDown.js';
describe("Pulldown tab", () => {
let wrapperPulldown;
beforeEach(() => {
jest.spyOn(pullDownModule, 'displayUPC');
wrapperPulldown = shallow(<PullDown />);
});
// ... some tests
it("should be clickable", () => {
wrapperPulldown.find("button").simulate("click");
expect(pullDownModule.displayUPC).toBeCalled();
});
});