首页
学习
活动
专区
圈层
工具
发布

【送红宝书】JavaScript 测试系列实战(四):掌握 React Hooks 测试技巧

waitForNextUpdate 并去 await 它返回的 Promise,当重渲染完成后,就可以使用调用断言语句来进行判断啦。...至于怎么用 Mock 来写,就留给作业给你吧~ 测试 Redux + Hooks 在规模较大的应用中,我们通常会使用一个状态管理库来解决复杂的数据流问题,而最受欢迎的选择无疑是 Redux。...如果你熟悉 Redux 的话,你应该记得 react-redux 提供了 Provider 组件来向所有子组件提供 Store 对象,但是在测试的时候,我们该怎么让 Provider 去包裹待测试的钩子呢...通过 wrapper 来提供上下文 幸运的是,renderHook 支持传入第二个参数,用于调节钩子的渲染配置,其中一个我们需要的配置就是 wrapper 。...这个 wrapper 专门用来提供 React Context,当然也适用于 Redux 的 Provider。

2.5K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Nextjs任意组件数据加载

    Nextjs中SSR渲染的局限性 getInitialProps()方法虽然强大好用,但是现在还存在一个问题——只能在“内页”中使用。Nextjs_规定了所有放置到..../component)的组件是无法使用getInitialProps()方法的。乍一看这样似乎没多大问题,但是某些应用又需要这些组件不能放置到./pages中暴露到_url_中,又需要异步加载数据。...而React的单向数据流让组件与组件之间没有直接的沟通方式,规范化从技术层面就被强化,进而才会产生了_Redux_、_Flux_这一类按照“分-总-分”的模式(实际上就是一个消息总线模式)去控制模块间沟通的...组件ssr异步数据实现 为了实现本文的需求——让所有组件实现类似于getInitialProps()的方法,我们先要理清_Nextjs_前后端渲染的过程。 渲染过程 _Nextjs_为使用者提供了...., 'executeReport'); /** * app的getInitialProps会在服务端被调用一次,在前端每次切换页面时被调用。

    5.6K20

    企业级 React 项目的高级测试设置

    测试不仅仅是为了提高覆盖率,其主要目的是尽可能地模拟实际使用场景。最近,我需要为一个庞大的ReactJS项目建立测试架构。让我展示给你我是如何做的。虽然它还不完整,但我想与你分享我的进展。...该项目已经在使用Enzyme进行测试。虽然Enzyme是一个不错的库,但是react-testing-library是测试React组件的更好选择。React团队也推荐使用它。...如果组件依赖于redux状态,那么除非连接到redux状态,否则无法测试所有行为。那么我们该怎么办呢?首先,我们需要创建一个可重用的函数来渲染组件。这有点类似于ReactJS中的渲染属性模式。...这些是你想要使用redux存储来测试组件的值。...然后,我们用Redux提供的Provider将传递的组件包装起来。

    70000

    手把手带你用next搭建一个完善的react服务端渲染项目(集成antd、redux、样式解决方案)

    官网:nextjs.org 中文官网:nextjs.frontendx.cn 当使用 React 开发系统的时候,常常需要配置很多繁琐的参数,如 Webpack 配置、Router 配置和服务器配置等...如果需要做 SEO,要考虑的事情就更多了,怎么让服务端渲染和客户端渲染保持一致是一件很麻烦的事情,需要引入很多第三方库。...next 会在路由切换前去帮你调用这个方法,这个方法在服务端渲染和客户端渲染都会执行。(刷新 或 前端跳转) 并且如果服务端渲染已经执行过了,在进行客户端渲染时就不会再帮你执行了。...default: return state } } // 这里暴露出的是创建store的工厂方法 // 每次渲染都需要重新创建一个store实例 // 防止服务端一直复用旧实例 无法和客户端状态同步...和 next 在上面 引入 redux (客户端普通写法) 介绍中,我们简单的和平常一样去引入了 store,但是这种方式在我们使用 next 做服务端渲染的时候有个很严重的问题,假如我们在 Index

    6.8K10

    React服务端渲染与同构实践

    早些年前,大部分网站都使用传统的 MVC 架构进行后端渲染,就是实现一个 Controller,处理请求时在服务端拉取到数据 Model,使用模版引擎结合 View 渲染出页面,比如 Java + Velocity...和 React 都提供了 SSR 相关的能力,在决定在做之前我们考虑了一下使用哪种技术栈,之所以决定使用 React 是因为对于团队来说,统一技术栈在可维护性上显得比较重要: 已有一套基于 React...controler/indexReact'); module.exports = app => { // 需要直出页面路由配置 const { routes } = config; // IMServer会调用此方法...踩坑 无法同构的业务逻辑 像因为生命周期的不同要在 componentDidMount绑定事件,不能在服务端能执行到的地方访问 DOM API 这些大家都应该很清楚了,其实大概只需要实现最主要几个同构的基础模块即可...后续思考 可以看齐 Nextjs 这整个设计其实把构建能力抽象出来,钩子可配置化后,就可以成为一个直出框架了。当然也可以像 Nextjs 那样实现一些 Document 等组件来使用。

    95230

    React服务端渲染与同构实践

    早些年前,大部分网站都使用传统的 MVC 架构进行后端渲染,就是实现一个 Controller,处理请求时在服务端拉取到数据 Model,使用模版引擎结合 View 渲染出页面,比如 Java + Velocity...和 React 都提供了 SSR 相关的能力,在决定在做之前我们考虑了一下使用哪种技术栈,之所以决定使用 React 是因为对于团队来说,统一技术栈在可维护性上显得比较重要: 已有一套基于 React...indexReact'); module.exports = app => { // 需要直出页面路由配置 const { routes } = config; // IMServer会调用此方法...踩坑 无法同构的业务逻辑 像因为生命周期的不同要在componentDidMount绑定事件,不能在服务端能执行到的地方访问 DOM API 这些大家都应该很清楚了,其实大概只需要实现最主要几个同构的基础模块即可...后续思考 可以看齐 Nextjs 这整个设计其实把构建能力抽象出来,钩子可配置化后,就可以成为一个直出框架了。当然也可以像 Nextjs 那样实现一些 Document等组件来使用。

    1.3K10

    一篇看懂 React Hooks

    Redux Redux 的精髓就是 Reducer,而利用 React Hooks 可以轻松创建一个 Redux 机制: // 这就是 Redux function useReducer(reducer...而 react-redux 的 connect 部分做的事情与 Hook 调用一样: // 一个 Action function useTodos() { const [todos, dispatch...如果要真正实现一个 Redux 功能,也就是全局维持一个状态,任何组件 useReducer 都会访问到同一份数据,可以和 useContext 一起使用。...React 约定大于配置脚手架 nextjs umi 以及笔者的 pri 都通过有 “约定路由” 的功能,大大降低了路由配置复杂度,那么 React Hooks 就像代码级别的约定,大大降低了代码复杂度...**正常方式应该拿不到,所以退而求其次,将 useRenderProps 拿到的 Toggle 传给 wrap,让 wrap 构造 RenderProps 执行环境拿到 on 与 toggle 后,调用

    4.1K20

    在前端,如何针对特意功能高效技术选型?

    请使用正确的关键词进行搜索: react modal。 如果不出所料,这里可以选出一个或多个比较合适的第三方库。那对于一个选择困难症,如何从中挑选一个更好的库呢?...答:使用最流行的技术方案。最流行的技术方案往往拥有更丰富的生态与更多的从业人员,既方便找轮子,又好招人。 下载量 (流行度) 最流行的技术方案指的是 「挑选下载量最高的库,而非 Star 最高的库」。...考察其质量性,是否含有测试、Type等 M: 考察其维护性,如最后一次更新时间,是否长时间未更新,如 Issues 的个数,是否有好多问题悬而未决 在这里,山月推荐一个选型必备网站: npm trends...文档中的示例: 如 lodash及一众较小体积的库 长按识别二维码查看原文 标题:lodash 仓库中的示例: 如 redux、nextjs 与 koa 长按识别二维码查看原文 标题:redux...长按识别二维码查看原文 标题:nextjs 长按识别二维码查看原文 标题:koa 仓库中的测试: 适用于一些边界的示例 为了某一个待调研的库,在本地新建一次性文件进行学习是一件不推荐的事情

    1.1K10

    React + Redux Testing Library 单元测试

    单元测试站在使用者的角度来使用该模块,而代码的易测性也就代表着代码的可维护性。...唯一需要注意的是, 额外的expect.assertions(number) 其实是验证在测试期间所调用的断言数量,这在测试多层异步代码时很有用,以确保实际调用回调中的断言次数。...古人说「读史让人明智」,学习历史是为了更好得前行,为了能够认识现在,看清未来。...当测试 action 的时候,我们需要增加一个 mocking 服务层——例如,我们可以把 API 调用抽象成服务,然后在测试文件中用 mock 服务响应所期望的 API 调用。...然后我们就可以使用 Jest 模拟一个 action 的行为再传给 store,而 actionClick 这个伪造函数能够让我们去断言该 action 是否被调用过。

    2.8K10

    年轻时,我不写单元测试

    笔者在这里试着归纳了一下解决问题的办法 样式问题需要制定相应的规范 不能使用css,只能用less来书写(大哥,都2888年了还不用less吗) 使用less的类模块化写法 命名风格采用BEM (推荐)...如果你已经有了答案,欢迎下方指正) 基于此,笔者希望在前端编写测试用例能够实现以下的目标: 先保证一个一个的模块基础功能正常 增加新功能时,原有功能不受影响 本着实现以上的要求,笔者下来介绍下具体的使用...一开始我觉得单元测试很鸡肋的原因也是没有深入了解它,这次发现就算是和业务结合很紧密的组件,也能够模拟正常的操作,这里就贴一个和redux结合的组件来举例 import React from 'react...maker/redux/store'; import { updateAppInfo } from '@/entries/maker/redux/action'; import moxios from...更新一个bug fix,在高阶组件下,我们需要调用wrapper.update(); 这里是issue 更新一个jest全局变量包

    1.1K20

    开发 | 效率提升 100%,小程序开发应该这样做

    文 | xixilive 微信小程序的 API 实现需要兼顾方方面面,所以仍然使用 callback 写法。 众所周知,Callback-Hell(回调地狱)是传统 JS 语法上的历史问题。...看起来会比较多,不过不用担心,大多数都是声明性的,不需要你直接调用。 为了方便经验少些的同学理解,我将这些依赖分步安装。...接下来,我们来安装 Redux: 需要注意的是,由于在实际应用中,我们经常会需要异步调用 API 服务器的接口,因此我们还需要 redux-thunk 这个模块,来处理异步行为。...然后安装开发小程序的辅助模块: 其中,weapp 模块是对微信小程序 API 的 wrapper,提供了更易于使用的 API,redux-weapp 是基于 Redux 对微信小程序进行状态管理。...最后的话 范例代码未实际运行,仅用以表示开发步骤。我会尽快把这个范例实现完整,放到 GitHub 上。 最后,谢谢您耐心阅读至此!

    1.1K30

    高频React面试题及详解

    : Ref 被隔断,后来的React.forwardRef 来解决这个问题 Wrapper Hell: HOC可能出现多层包裹组件的情况,多层抽象同样增加了复杂度和理解成本 命名冲突: 如果高阶组件多次嵌套...Props都可以解决 Render Props缺陷: 使用繁琐: HOC使用只需要借助装饰器语法通常一行代码就可以进行复用,Render Props无法做到如此简单 嵌套过深: Render Props...,调试会比较困难,同时结果也难以预测;而redux提供能够进行时间回溯的开发工具,同时其纯函数以及更少的抽象,让调试变得更加的容易 场景辨析: 基于以上区别,我们可以简单得分析一下两者的不同使用场景....mobx更适合数据不复杂的应用: mobx难以调试,很多状态无法回溯,面对复杂度高的应用时,往往力不从心. redux适合有回溯需求的应用: 比如一个画板应用、一个表格应用,很多时候需要撤销、重做等操作...redux-thunk优点: 体积小: redux-thunk的实现方式很简单,只有不到20行代码 使用简单: redux-thunk没有引入像redux-saga或者redux-observable额外的范式

    3.1K40

    React中的Redux

    数据流 严格的单向数据流 是Redux架构的核心设计。这就意味着应用中所有的数据都遵循相同的生命周期,这样可以让应用变得更加可预测且容易理解。...同时也鼓励做数据范式化,这样可以避免使用多个且独立的无法相互引用的重复数据。 Redux应用中数据的生命周期遵循以下4个步骤: 调用store.dispatch(action) 。...技术上来说我们可以直接使用 store.subscribe() 来编写容器组件。但不建议这么做,因为这样写就无法使用 React Redux 带来的性能优化。...建议的方式是使用指定的 React Redux 组件 来让所有容器组件都可以访问 store,而不必显示地传递它。只需要在渲染根组件时使用即可。...像 redux-thunk 或 redux-promise 这样支持异步的 middleware 都包装了 store 的 dispatch() 方法,以此来让你 dispatch 一些除了 action

    5.3K20

    79.精读《React Hooks》

    useState),没有渲染(返回非 UI 的值),这样就可以作为 Custom Hooks 被任何 UI 组件调用。...而 react-redux 的 connect 部分做的事情与 Hook 调用一样: // 一个 Action function useTodos() { const [todos, dispatch...如果要真正实现一个 Redux 功能,也就是全局维持一个状态,任何组件 useReducer 都会访问到同一份数据,可以和 useContext 一起使用。...React 约定大于配置脚手架 nextjs umi 以及笔者的 pri 都通过有 “约定路由” 的功能,大大降低了路由配置复杂度,那么 React Hooks 就像代码级别的约定,大大降低了代码复杂度...renderProps 的门槛会大大降低,因为 Hooks 用起来实在是太方便了,我们可以抽象大量 Custom Hooks,让代码更加 FP,同时也不会增加嵌套层级。

    82430

    2019年大前端学习指南(祈澈姑娘的学习规划)

    React 持续跟踪升级,使用 Hooks 与 Suspense 改造现有项目,使用 Context API 替换项目中的 mobx 状态管理,使用React实现交互式组件的新方法,称为Hooks:https...中文网:http://www.angularjs.net.cn/ 数据层: 1:Redux Redux 目前用户很多,Redux因其简单易学体积小在短时间内成为最热门的前端架构。...Redux 中文文档:https://www.redux.org.cn/ 2:GraphQL GraphQL 和 Apollo 这段时间一直被讨论宣传,调查显示有非常多的人想要学习了解,可以关注下,Graphql...Nextjs中文文档:https://www.jianshu.com/p/8d070e2b39a5 Next.js中文站点 http://nextjs.frontendx.cn Next.js中文站...3:Flutter -跨端解决方案 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面,前端对于 Flutter 的热忱度之高一度让人有点惊讶,事实上我在

    18010
    领券