In this lesson, I use Enzyme and Jest to unit test a Counter Render Prop component. Writing integration tests are perfect for components that consume a Render Prop component. Likewise, unit tests are important to write for the Render Prop component itself, as you can test each individual unit that makes up the component.

import React from "react";
import Counter from "./Counter"; export default function CounterConsumer({ initial }) {
return (
<Counter initial={initial}>
{({ increment, decrement, counter }) => (
<div className="content" style={{ textAlign: "center" }}>
<h1>{counter}</h1>
<button className="button is-success" onClick={increment}>
Increment
</button>
<button className="button is-danger" onClick={decrement}>
Decrement
</button>
</div>
)}
</Counter>
);
}
import React, { Component } from "react";

export default class Counter extends Component {
state = { counter: this.props.initial || }; increment = () => this.setState(prevState => ({ counter: prevState.counter + }));
decrement = () => this.setState(prevState => ({ counter: prevState.counter - })); render() {
const { increment, decrement } = this;
const { counter } = this.state; return this.props.children({ increment, decrement, counter });
}
}

test:

import React from "react";
import ReactDOM from "react-dom";
import toJSON from "enzyme-to-json";
import { mount } from "enzyme";
import "./enzymeSetup";
import Counter from "./Counter"; it("Calls the Render Prop function", () => {
let renderFn = jest.fn().mockReturnValue(null);
const wrapper = mount(<Counter>{renderFn}</Counter>); expect(renderFn.mock.calls.length).toBe();
expect(wrapper.state("counter")).toBe();
}); it("Accepts an initial value", () => {
let renderFn = jest.fn().mockReturnValue(null);
const wrapper = mount(<Counter initial={}>{renderFn}</Counter>); expect(wrapper.state("counter")).toBe();
}); it("Increments", () => {
let renderFn = jest.fn().mockReturnValue(null);
const wrapper = mount(<Counter>{renderFn}</Counter>); wrapper.instance().increment(); expect(wrapper.state("counter")).toBe();
}); it("Decrements", () => {
let renderFn = jest.fn().mockReturnValue(null);
const wrapper = mount(<Counter>{renderFn}</Counter>); wrapper.instance().decrement(); expect(wrapper.state("counter")).toBe(-);
});

最新文章

  1. 异步|同步&amp;阻塞|非阻塞
  2. td元素
  3. VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
  4. @Inject.@Resource.@Autowired 的区别
  5. C语言中格式化输出的转换说明的fldwidth和precision解析
  6. Linux安装后的系统配置
  7. Microsoft SQL Server 2008 安装图解(Windows 7)
  8. 【行为型】Mediator模式
  9. 通过ionice和nice降低shell脚本运行的优先级
  10. Java 导出Excel的各种尝试
  11. Awk,Cat,Head分析Nginx日志常用命令
  12. PHP opcache扩展安装
  13. SmartSql Cache标签
  14. 工程师的URL大全
  15. js 文件异步上传 显示进度条 显示上传速度 预览文件
  16. 简化Getter 与 Setter 的插件 Lombok
  17. pipeline-安全测试
  18. Java反射的好处
  19. 【Win32 API】利用SendMessage实现winform与wpf之间的消息传递
  20. 【转】JavaScript代码性能优化总结

热门文章

  1. 使用GitHub来托管Larval框架
  2. ios OpenCv的配置和人脸识别技术
  3. hdoj--1251--统计难题(字典树)
  4. BZOJ 2957 分块
  5. shopping car 3.0
  6. &lt;video&gt; controlsList
  7. Android studio关于点击事件后的页面跳转,选择完成后返回(onActivityResult)
  8. PostgreSQL练习网站
  9. ubuntu16.04 安装配置matlab+python +cuda8.0+cudnn+opencv3.1的caffe环境
  10. easyUI在使用字符串拼接时样式不起作用,点击加号增加一行,点击减号删除一行效果。