首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React 测试驱动教程

基础层面上而言,在运行 react 应用时, 会在处理你代码和服务前后,只生成一个 bundle.js 客户端。 因为它是一个非常强大工具,所以我们会常常用到。...对我们来说是一种组件调用 render 方法,得到我们可以断言 React 元素,而无需实际安装组件到 DOM 上。更多 React 元素请看这。...接下来让我们测试一个组件安装和调用函数,当它安装时,我们可以得到一些暴露在 sinon信息和正在使用 spies。...我们可以假装 Root 组件有一个子组件叫 CommentList,安装后将调用任意回调。当通过给定 props 组件安装时,函数被调用,因此我们就可以测试这个场景。...一旦我们将 Karma 设置好了,我们运行测试程序时,不仅是只有 babel-loader,而是整个 webpack config。这为我们提供了很多便利,使得我们测试环境与开发环境相同。

4.6K20

【Web技术】639- Web前端单元测试到底要怎么写?

单元测试部分介绍 先讲一下用到了哪些测试框架和工具,主要内容包括: jest ,测试框架 enzyme ,专测 react ui 层 sinon ,具有独立 fakes、spies、stubs、mocks...,首先构建一个我们期望结果,然后调用业务代码,最后验证业务代码运行结果与期望是否一致。...前面说 saga 实际上是返回各种声明式 effects ,然后由引擎来真正执行。所以我们测试目的就是要看 effects 产生是否符合预期。那么 effect 到底是个神马东西呢?...完整代码内容 这里 (重要事情多说几遍,各位童鞋觉得好帮忙去给个 :star: 哈)。...写代码时,我用余光瞟见它。它一直提醒我,我做了写出整洁代码承诺。

3K30
您找到你想要的搜索结果了吗?
是的
没有找到

用 jest 单元测试改善老旧 Backbone.js 项目

、绑定事件等视图组件 我们实际项目中,视图层同时支持了 Backbone.View 和早期 react@13,这也正体现了其灵活之处。...babel 5 做 ES6 转译;但是由于之前源代码已经全部采用了 ES6 语法开发(部分初始 AMD 代码也做过自动转化),所以我们完全可以测试时采用较新 babel 6 加入对老版本 react...Backbone 中请求,包括 Backbone.sync / model.fetch() 等, 本质上还是调用 jQuery 中 $.ajax 方法(默认情况下),也就是传统 xhr 方式,使用...测试 Backbone.View 组件 比之于测试 react 还需要 enzyme 等支持,测试 Backbone.View 其实要简单许多,只需要获取到其 $el 属性,调用 jQuery 惯有方法即可...$el.find('.multi').length).toEqual(0); }); 对方法调用测试 自然还是用 sinon 来做: it('应正确响应事件回调并加载子模板', function()

3.4K10

React 组件进行单元测试

单元测试是软件开发过程中要进行最低级别的测试活动,软件独立单元将在与程序其他部分相隔离情况下进行测试。 测试框架 测试框架作用是提供一些方便语法来描述测试用例,以及对用例进行分组。...React 单元测试常见案例 用例预处理或后处理 可以用beforeEach和afterEach做一些统一预置和善后工作,每个用例之前和之后都会自动调用: describe('test components...; }); ... }); 调用组件“私有”方法 对于一些组件中,如果希望测试阶段调用到其一些内部方法,又不想对原组件改动过大,可以用instance()取得组件类实例...所谓异步操作,不考虑和 ajax 整合集成测试情况下,一般都是指此类操作,只用 setTimeout 是不行,需要搭配 done 函数使用: //组件中const Comp = (props)...单元测试可以为我们开发和维护提供基础保障,使我们思路清晰、心中有底情况下完成对代码搭建和重构; 需要注意是,世上没有包治百病良药,单元测试也绝不是万金油,秉持谨慎认真负责态度才能从根本上保证我们工作进行

4.2K40

响应式、模版克隆、Proxy 代理。。。JavaScript 框架工作原理你还了解多少?

简单地说就是 React 假定您整个虚拟 DOM 树都需要从头开始重建,而防止这些更新唯一方法就是实现 useMemo(或者以前 shouldComponentUpdate)。...相反,现代框架使用是 push-based 响应模型。在这种模型中,组件树各个部分都会订阅状态更新,只有相关状态发生变化时才会更新 DOM。...这优先考虑了“默认情况下高性能”设计,以换取一些前期记录成本(尤其是在内存方面)来跟踪哪些状态与 UI 部分相关联。...我们需要确保我们 effects 可以订阅正确 props。为此,我们将运行 effect,记录下它进行任何 get 调用,并在 prop 和 effect 之间创建映射。...在后续运行中向新 props 订阅 efftcts(例如,如果某些 getter 只 if 代码块中调用) 不过,这些对于我们玩具示例来说已经足够了,让我们继续进行 DOM 渲染。

15910

使用Enzyme测试React(Native)组件|洞见

则是一个可以用来Mock和Stub数据代码第三方测试工具库,当我们需要检查一个组件当中某个特定函数是否被调用时,我们可以使用sinon.spy()方法监视所传入该组件作为proponButtonClick...前面我们所谈论都是如何测试使用react-dom所构建React组件,即最终渲染结果是浏览器当中DOM结构,但对于React Native来说,JavaScript代码最终会被编译并用于调用iOS...(图片来自:http://t.cn/R6UrTrG) 与此同时,React Native还有特别多Mobile环境依赖,所以没有真实设备情况下很难对其运行环境进行模拟,特别是当你希望持续集成服务器...与许多其他基于快照测试框架不同,Enzyme允许开发者不进行设备渲染情况下做测试,从而实现速度更快、粒度更小测试。...开发React应用时,我们经常需要做大量功能测试,而Enzyme可以大规模地减少功能测试数量上做出贡献。 ?

2.3K40

实例入门 Vue.js 单元测试

本文作为《对 React 组件进行单元测试》一文姊妹篇,将照猫画虎式尝试面对初学和向中级进阶开发者,对单元测试 Vue.js 技术栈 中应用做出入门介绍。 I....单元测试是软件开发过程中要进行最低级别的测试活动,软件独立单元将在与程序其他部分相隔离情况下进行测试。...我们把绝大部分能在单元测试里覆盖用例都放在单元测试覆盖,只有单元测试测不了才会通过端到端与集成测试来覆盖。...真相只有一个,要么是目标模块写有问题,要么是测试条件写错了 -- 总之我们对其修正后重新运行: ? 由此,我们对一次单元测试过程有了基本了解。...单元测试可以为我们开发和维护提供基础保障,使我们思路清晰、心中有底情况下完成对代码搭建和重构。 封装好则测试易,反之不恰当封装让测试变得困难。

2.8K20

如何模拟一个XMLHttpRequest请求用于单元测试——nise源码阅读与分析

nise是什么 fake XHR and Server. niseGithub上面的介绍很简单,虽然只有四个单词,但是却很精确说明了这个库含义——构造一个模拟XHR和Server对象,用来替换原生对象用来满足测试需求...它是Sinon.js一部分,用来处理HTTP相关测试问题。 该库提供了替换原生XHR对象和Server相关接口,但是我们本文中只介绍关于XHR部分,也就是浏览器中XHR对象替换。...,并返回一个带有restore方法fake XHR对象构造函数 }; 我们使用时,只需调用userFakeXMLHttpRequest方法,即可将原生XHR对象替换成nise提供XHR对象。...测试完成后,我们再调用返回restore方法,这样我们就恢复了原生XHR对象。 返回模拟HXR对象还有部分API接口可以调用,这部分我们将在下一节——nise结构中进行介绍。...我们再通过nise记录数据,组合其他单元测试框架来对业务代码进行测试。 nise源码只有600余行,而且非常简单易懂。

2.4K10

用不了多久 Web Component,就能取代你前端框架吗?

作为一种性能优化,只有在这被列举出属性才会监测它们改变。无论这个attribute什么时候改变了,都会调用attributeChangedCallback,参数分别是当前值和新值。...这意味着定义在内部任何资源都无法获取,任何内部定义CSS和JavaScript只有当它被插入DOM中时,才会被执行。...要注意是,只有当slot节点自身改变才会触发,而这些slot节点子节点并不会触发。...它不会被渲染,并只有确保内容是有效才会进行解析。模板中JavaScript不会被执行,也会获取任何外部资源,默认情况下它是隐藏。...这需要以下index.html能够浏览器中运行测试。除了Mocha,这个设置还加载了WebcomponentsJS polyfill,Chai用于断言,以及Sinon用于监听和模拟。 <!

2.1K40

React 16 - 生态:UI 库、Next.js、测试、开发调试工具

Material UI 样式更加美观,适合 2C 场景 # 选择因素 组件库是否齐全 样式风格是否符合企业业务需求 API 设计是否便捷灵活 技术支持是否完善 开发是否活跃 # Next.js # 同构应用 服务端执行虚拟...目录映射静态文件 page 具有特殊静态方法 getInitialProps,用于获取页面初始化数据 页面中使用其他 React 组件 页面也是标准 node 模块,可以使用其他 React 组件...让前端单元测试变得容易 React 应用很少需要访问浏览器 API 虚拟 DOM 可以 Node.js 环境运行和测试 Redux 隔离了状态管理,可以进行纯数据层单元测试 # 相关工具 Jest:...单元测试框架 JS DOM:浏览器环境 Node.js 模拟 Enzyme:React 组件渲染和测试 nock:模拟 HTTP 请求 sinon:函数模拟和调用跟踪 istanbul:单元测试覆盖率...# 开发调试工具 ESLint Prettier React DevTool Redux DevTool

1.4K30

单元测试初体验

单元测试框架 Mocha Mocha 是 JavaScript 一种单元测试框架,既可以浏览器环境下运行,也可以 Node.js 环境下运行。...浏览器中加载文件/模式列表。...sinon.js 中 spy 主要用来监视函数调用情况,sinon 对待监视函数进行 wrap 包装,因此可以通过它清楚知道,该函数被调用过几次,传入什么参数返回什么结果,甚至是抛出异常情况。...在运行时用 stub 替换真正代码,忽略调用代码原有实现。目的是用一个简单一点行为替换一个复杂行为,从而独立地测试代码某一部分。...它拥有 spy 提供所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数调用信息。换句话说,当使用 spy 时,原函数还会继续执行,但使用 stub 时就不会。

1.5K20

【Web技术】264- Web Component可以取代你前端框架吗?

作为一种性能优化,只有在这被列举出属性才会监测它们改变。无论这个attribute什么时候改变了,都会调用attributeChangedCallback,参数分别是当前值和新值。...这意味着定义在内部任何资源都无法获取,任何内部定义CSS和JavaScript只有当它被插入DOM中时,才会被执行。...要注意是,只有当slot节点自身改变才会触发,而这些slot节点子节点并不会触发。...它不会被渲染,并只有确保内容是有效才会进行解析。模板中JavaScript不会被执行,也会获取任何外部资源,默认情况下它是隐藏。...这需要以下index.html能够浏览器中运行测试。除了Mocha,这个设置还加载了WebcomponentsJS polyfill,Chai用于断言,以及Sinon用于监听和模拟。 <!

2.5K30

为ES6配置JavaScript测试工具

即使是你使用了一个调用了Babel库,这也是适用。把配置选项写入.babelrc文件意味着你不必多处维护这些信息了。...以下是一个使用了es2015和react两个preset.babelrc文件示例: { "presets": ["es2015", "react"] } 配置Webpack或Browserify...Karma时,为了浏览器中执行Babel转译测试,我们需要安装karma-babel预处理器模块。...某些情况下你需要使用this.timeout来控制一个测试超时之前等待时间。如果你使用了箭头函数,那这个配置就不会生效。 出现这种情况原因是箭头函数使用this机制。...避免Sinon中使用箭头函数 与Mocha类似,Sinon.js中使用箭头函数也可能导致问题。 问题出在sinon.test上。

2.9K20

React全家桶与前端单元测试艺术|洞见

你可以看到后面对于DOM和异步操作这些和副作用相关例子都靠判等测试。把作用幂等于数据,拿到数据就一定发生作用,然后再测数据,是一个基本思路。 以上是你以前学习测试第一天就会内容,所以不存在门槛。...因此我们测试必须减少共享状态来提高并发能力,不然就会出现意想不到错误。安装和运行: yarn add ava ava --watch 这样可以运行并watch测试。...它以Virtual DOM形式封装了恶心浏览器基础设施,让我们以函数和数据结构来描述组件,所以和大部分框架不同,我们测试依然可以node上并行运行。...这样可以用更主流enzyme来测试: import {shallow} from 'enzyme' import sinon from 'sinon' test('TextField with enzyme...如果你React项目原来TDD边缘摇摆不定,现在是时候入一发这种唯快不破了。

1.1K72

2018年6月份GitHub上最热门开源项目

本篇文章为大家盘点了6月份最热门GitHub 项目,一起来看看你都知道哪些,或者有哪些你已经使用了。...,并仅在代码使用–reload运行,依赖才会更新 ● 可以控制文件系统和网络访问权限以运行沙盒代码,默认访问只读文件系统可访问,无网络权限。...Docz是一个高效、零配置事件记录工具 ,Docz 基于 MDX ,有许多内置组件可以帮助你记录事情。它同时支持添加插件,以便于通过 Docz 流程和数据管控很多事情。...,可记录,重放和存根 HTTP 交互。...12 taro https://github.com/NervJS/taro Star 4964 多端统一开发框架,支持用 React 开发方式编写一次代码,生成能运行在微信小程序、H5、React

97850

Flutter 开发实战与前景展望 - RTC Dev Meetup

Weex 再到如今 Flutter ,期间也参与 React 、 Vue 、小程序等相关开发,算是一个大前端选手吧。...React Native 跑了一天都没跑起来经历,同时 Flutter 在运行和SDK版本升级阵痛也会少很多。..._inheritedWidgets 一般情况下是空只有当父控件是 InheritedWidget 或者本身是 InheritedWidgets 时才会有被初始化,而当父控件是 InheritedWidget...image image28.GIF 同时你发现没有,代码中 parent Container 只有100情况下,它 child 可以正常画 200,这是因为我们 paint 没有跟着 RenerObjcet...这部分因为之前以前聊过,就不赘述了 三、Flutter Web RN因为是原生控件,所以reactreact native 整合这件事上存在难度。

1.9K20

React框架 Hook API

函数组件主体内(这里指在 React 渲染阶段)改变 DOM、添加订阅、设置定时器、记录日志以及执行其他包含副作用操作都是不被允许,因为这可能会产生莫名其妙 bug 并破坏 UI 一致性。...默认情况下,effect 将在每轮渲染结束后执行,但你可以选择让它 只有某些值改变时候 才执行。 清除 effect 通常,组件卸载时需要清除 effect 创建诸如订阅或计时器 ID 等资源。...effect 条件执行 默认情况下,effect 会在每轮组件渲染完成后执行。这样的话,一旦 effect 依赖发生变化,它就会被重新创建。 然而,某些场景下这么做可能会矫枉正。...除此之外,请记得 React 会等待浏览器完成画面渲染之后才会延迟调用 useEffect,因此会使得处理额外操作很方便。...因此,useDebugValue 接受一个格式化函数作为可选第二个参数。该函数只有 Hook 被检查时才会调用。它接受 debug 值作为参数,并且会返回一个格式化显示值。

12500

医疗数字阅片-医学影像-REACT-Hook API索引

函数组件主体内(这里指在 React 渲染阶段)改变 DOM、添加订阅、设置定时器、记录日志以及执行其他包含副作用操作都是不被允许,因为这可能会产生莫名其妙 bug 并破坏 UI 一致性。...默认情况下,effect 将在每轮渲染结束后执行,但你可以选择让它 只有某些值改变时候 才执行。 清除 effect 通常,组件卸载时需要清除 effect 创建诸如订阅或计时器 ID 等资源。...effect 条件执行 默认情况下,effect 会在每轮组件渲染完成后执行。这样的话,一旦 effect 依赖发生变化,它就会被重新创建。 然而,某些场景下这么做可能会矫枉正。...除此之外,请记得 React 会等待浏览器完成画面渲染之后才会延迟调用 useEffect,因此会使得处理额外操作很方便。...因此,useDebugValue 接受一个格式化函数作为可选第二个参数。该函数只有 Hook 被检查时才会调用。它接受 debug 值作为参数,并且会返回一个格式化显示值。

2K30

iOS_单元测试三之OCMock使用

7.3、存根和期望 Stub actions and expect 也可以期望情况下使用andReturn、andThrow等。...当开发人员尝试为此类创建模拟程序时,将引发异常,解释问题说 该方法单独调用中返回不同值是可以接受,这使它在运行时对特定条件做出反应 如果该方法为reason赋值,返回值将被忽略 对于所有未实现此方法类...某些情况下,可以对方法进行存根,然后对其进行验证。 当方法子类中被覆盖时,可以使用运行后验证。...具体来说,以 NS 或 UI 作为前缀类中,所有带有下划线前缀和/或后缀方法。 某些情况下,可以对方法进行存根,然后对其进行验证。...10.9、运行后验证不能使用延迟 目前无法验证具有延迟方法。这目前只能使用下面严格模拟和期望中描述expect-run-verify方法。

3.1K20
领券