reactjs - 酶反应打字稿测试不模拟点击
问题描述
我正在尝试模拟单击按钮,但测试总是失败,我不知道为什么。似乎酶无法选择DOM元素来触发点击它,因为调用始终为0。我使用的是酶3.7.0和jest 23.6.0
按钮.tsx
import * as React from 'react';
import './button.scss';
export interface IButton {
value: string;
onClick: () => void;
}
class Button extends React.Component<IButton, {}> {
render() {
return (
<div className="Button">
<button id="btn" onClick={this.props.onClick} className="Button__btn" type="button">
{this.props.value}
</button>
</div>
);
}
}
export default Button;
按钮.test.tsx
import * as React from 'react';
import { shallow } from 'enzyme';
import Button from './Button';
test.only('Button test', () => {
const myMock = jest.fn();
const mockedButton = shallow(<Button value="testvalue" onClick={() => myMock} />);
console.log(mockedButton.debug());
// Interaction demo
expect(mockedButton.text()).toEqual('testvalue');
mockedButton.find('button').simulate('click');
mockedButton.find('.Button__btn').simulate('click');
mockedButton.find('button.Button__btn').simulate('click');
expect(myMock.mock.calls.length).toBe(0); // !! Should be 3 ?
// Snapshot demo
expect(mockedButton).toMatchSnapshot();
});
但是,生成的快照可以让我选择正确的元素(按钮)
exports[`Button test 1`] = `
<div
className="Button"
>
<button
className="Button__btn"
onClick={[Function]}
>
testvalue
</button>
</div>
`;
解决方案
原因是这部分:
onClick={() => myMock}
在这里,您描述了返回您的模拟而不是调用它的单击处理程序。它应该onClick={() => myMock()}
或更好只是onClick={myMock}
反而。React 会打电话给myMock
你.simulate('click')
推荐阅读
- python - 无服务器和通过 pymongo 和连接池的连接
- mysql - Sails 数据存储适配器
- c# - 如何更改xamarin表单android中的工具栏后退图标
- file - 如何在unix文件中的第4个管道之前和最后一个双引号之后添加\ n
- c# - WebAPI:从 System.Web.Http.Filters.ActionFilterAttribute 获取控制器对象
- amazon-web-services - 从 Amazon ML 访问 S3
- laravel - Laravel 验证应该失败,但会出现“超出范围”的 SQL 异常错误
- python - python中的llist索引超出范围
- reactjs - 数组中没有渲染元素 - ReactJS
- ios - 在目标 c 中填充一系列自定义模型崩溃