【发布时间】:2019-06-01 03:15:24
【问题描述】:
我有一个模拟点击的小测试(希望通过测试做更多的事情,但这是我目前卡住的地方):
import React from 'react';
import Enzyme, { mount } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import HamburgerIcon from './HamburgerIcon';
Enzyme.configure({ adapter: new Adapter() });
test('hamburger icon changes class and state on click', () => {
const wrapper = mount(<HamburgerIcon />);
const hamburgerIcon = wrapper.find('div#mobile-nav');
hamburgerIcon.simulate('click');
});
运行此测试时,我收到错误:
TypeError: this.props.showOverlay 不是函数
在阅读了一些内容后,我意识到这不起作用,因为模拟点击调用了一个比正在测试的组件高两层的函数 (HamburgerIcon)。
当我第一次尝试运行它时,我使用的是 Enzyme 的 shallow,后来我将其更改为 mount,认为这将使测试访问 showOverlay 函数,但我错了。
然后我读到这可能是mock function 的一个很好的用例,我尝试开始实现它:
...
const showOverlay = jest.fn();
// how to set this.props.ShowOverlay to the const above??
test('has div with class .closed', () => {
const wrapper = mount(<HamburgerIcon />);
const hamburgerIcon = wrapper.find('div#mobile-nav');
hamburgerIcon.simulate('click');
});
这就是我迷失的地方——我不确定模拟函数是否是正确的方向,我也不确定设置模拟函数的语法将如何工作。
【问题讨论】:
标签: javascript reactjs unit-testing jestjs enzyme