Ser*_*lov 32 unit-testing mocha.js sinon reactjs enzyme
我真的不知道如何在react组件的子代中模拟内联函数
我栈:sinon,chai,enzyme,
组件用法:
<ListItem onClick={() => someFn()} />
Run Code Online (Sandbox Code Playgroud)
组件的渲染:
render() {
return (
<li>
<a href="#" onClick={e => {
e.preventDefault();
this.props.onClick();
}}
> whatever </a>
</li>
);
}
Run Code Online (Sandbox Code Playgroud)
我们在这里onClick打电话e.preventDefault().如何告诉<a href>(link)不要打电话e.preventDefault()?我怎么能嘲笑那个onClick?
以下我在测试中尝试:
浅拷贝设置
function setup() {
const someFn = sinon.stub();
const component = shallow(
<ListItem
onClick={() => {
someFn();
}}
/>
);
return {
component: component,
actions: someFn,
link: component.find('a'),
listItem: component.find('li'),
}
}
Run Code Online (Sandbox Code Playgroud)
而且测试
it('simulates click events', () => {
const { link, actions } = setup();
link.simulate('click'); //Click on <a href>
expect(actions).to.have.property('callCount', 1); //would be good if we'll remove e.preventDefault()
});
Run Code Online (Sandbox Code Playgroud)
测试的输出错误:
TypeError: Cannot read property 'preventDefault' of undefined
Run Code Online (Sandbox Code Playgroud)
Wit*_*ult 80
试试这个
link.simulate('click', {
preventDefault: () => {
}
});
Run Code Online (Sandbox Code Playgroud)
小智 7
test('simulates click events', () => {
const e = { stopPropagation: jest.fn() };
const component = shallow(<ListItem{...props} />);
const li = component.find('li').at(0).childAt(0)
li.props().onClick(e)
expect();
});
Run Code Online (Sandbox Code Playgroud)
对于那些使用 Jest 和@testing-library或react-testing-librarys 的人fireEvent,您需要提供一个初始化的事件对象,否则无法通过您的元素调度该事件。
然后可以e.preventDefault通过为该初始化事件分配一个属性来断言被调用:
test('prevents default on click', () => {
const {getByText} = render(<MyComponent />);
const button = getByText(/click me/);
// initialise an event, and assign your own preventDefault
const clickEvent = new MouseEvent('click');
Object.assign(clickEvent, {preventDefault: jest.fn()});
fireEvent(button, clickEvent);
expect(clickEvent.preventDefault).toHaveBeenCalledTimes(1);
});
Run Code Online (Sandbox Code Playgroud)
对于stopPropagation.
Anton Karpenko对 Jest的回答很有用。
| 归档时间: |
|
| 查看次数: |
16087 次 |
| 最近记录: |