reactjs - 开玩笑 - 反应 - 如何比较包含“Function onClick”的渲染输出
问题描述
当我有
expect(result.toJSON())
.toEqual(<button className="btn btn-prev" onClick="{[Function onClick]}" type="button">Prev</button>);
它很接近但不太正确 - 只是缺少Function onClick
:
expect(received).toEqual(expected) // deep equality
- Expected
+ Received
<button
className="btn btn-prev"
- onClick="{[]}"
+ onClick={[Function onClick]} // <--- the difference, Function onClick is missing
type="button"
>
Prev
</button>
但是,如果我尝试添加缺少的“ Function onClick
”,即
expect(result.toJSON())
.toEqual(<button className="btn btn-prev" onClick="{[Function onClick]}" type="button">Prev</button>);
我明白了
- onClick="{[Function onClick]}"
+ onClick={[Function onClick]}
如果我删除引号,我会在 onClick 处收到解析错误!
处理这个问题的正确方法是什么,这对其他人来说一定是个问题
解决方案
Jest
只是一个测试运行器和模拟工具。它无法访问您的反应组件。
你可以试试React 的Enzyme lib。
您可以执行以下操作:
import React from 'react';
import { shallow } from 'enzyme';
import MyComponent from './someComponent'
describe('<MyComponent />', () => {
const someClickFunc = Jest.fn();
it('renders xxx components', () => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.find(xxx)).to.have.lengthOf(x);
});
it('simulates click', () => {
const wrapper = shallow(<MyComponent onClick={someClicFunc} />);
wrapper.find(MyComponent).simulate('click');
expect(someClicFunc).toBeCalled();
// or find the target dom and compare the value
// expect(wrapper.find('input').value).toEqaul('somevalue u expected')
});
推荐阅读
- java - 如何将一个实体映射到两个数据库(MongoDb 和 Neo4j),每个数据库都有自定义属性
- csv - 以格式不正确的 csv 打印所有重复项
- c# - 是否有必要为这些行使用事务范围
- php - Symfony 分析器非常慢
- c++ - 如何解决链接到静态库的共享库中的 C++ 链接错误
- javascript - 自定义波纹效果(我想在我的内联样式中使用 var)
- java - 在 Scala 中扩展 Java 抽象类
- javascript - 如何延迟屏幕更新?
- node.js - 在 macOS 上获取最新 npm 的正确方法?
- opengl - 使用 OpenGL 对具有不同图像的立方体进行纹理处理