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

当有函数没有使用“yield”或者像“call”或“put”这样的效果时,如何测试sagas?

在测试sagas时,可以使用一些常见的测试方法和工具来确保其正确性和可靠性。以下是一些常用的测试方法和工具:

  1. 单元测试:针对每个saga函数编写单元测试,测试其输入和输出是否符合预期。可以使用测试框架如Jest、Mocha等来编写和运行单元测试。
  2. 模拟器:使用模拟器来模拟saga函数中的各种效果,如“call”、“put”等。可以使用redux-saga-test-plan等工具来创建模拟器,并编写测试用例来验证saga函数的行为。
  3. 快照测试:对于复杂的saga函数,可以使用快照测试来验证其行为是否与预期一致。快照测试会记录saga函数的执行过程,并将其与预期结果进行比较。
  4. 集成测试:在应用程序的整体环境中运行saga函数,并验证其与其他组件的交互是否正常。可以使用工具如Cypress、Selenium等来编写和运行集成测试。
  5. 覆盖率测试:使用代码覆盖率工具来检查测试用例是否覆盖了saga函数的所有代码路径。可以使用工具如Istanbul、Jest等来生成代码覆盖率报告。

总结起来,测试sagas的方法包括单元测试、模拟器、快照测试、集成测试和覆盖率测试。通过这些测试方法,可以确保saga函数的正确性和可靠性。对于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方文档或咨询腾讯云的技术支持团队获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React saga_react获取子组件ref

通常会与reselect库配合使用call 阻塞地调用 saga 或者返回 promise 函数,只在触发某个动作。...这些Effect执行后,函数resolve返回一个描述对象,然后redux-saga中间件根据这个描述对象恢复执行generator中函数。...通过使用Effect类函数,可以方便单元测试,我们不需要测试副作用函数返回结果。只需要比较执行Effect方法后返回描述对象,与我们所期望描述对象是否相同即可。...这个描述对象包含了所需要调用方法和执行方法实际参数,我们认为只要描述对象相同,也就是说只要调用方法和执行该方法实际参数相同,就认为最后执行结果肯定是满足预期这样可以方便进行单元测试,...这样咋一看没有什么问题,但是注意call方法调用是会阻塞主线程,具体来说: 在call方法调用结束之前,call方法之后语句是无法执行 如果call(getList)存在延迟,call(getList

4.5K30
  • redux-saga

    API形式提供,提供各种语义用来生成Effect工具函数,例如把dispatch action包装成put、把方法调用包装成call/apply Effect -> 业务操作 在执行时内部进行转换...Effect层存在主要意义是为了易测试性,所以用简单描述对象来表示操作,多这样一层指令 虽然可以直接yield Promise(比如上面核心实现里示例),但测试case中无法比较两个promise...(不用mock异步函数),这不很过分 注意,不需要mock异步函数只是简化了单元测试一个环节,即便使用这种对比描述对象方式,仍然需要提供预期数据,例如: // 测试场景直接执行 const iterator...简单理解的话:在redux-saga里,Saga就是generator,Sagas就是多个generator Sagas2种顺序组合方式: yield* saga() call(saga) 同样,直接...yield* iterator运行时展开也面临不便测试问题,所以通过call包一层Effect。

    1.9K41

    Taro 小程序开发大型实战(七):尝鲜微信小程序云(下篇)

    最后我们定义了一个 postApi 对象,用于存放所有和用户逻辑函数,并添加 createPost API 属性然后将其导出,这样在 post saga 函数里面就可以导入 postApi 然后通过...内部没有文章,才进行数据获取。...,这样目的主要是为了之后发帖标志用户,或者获取用户个人信息用。...并且,加了一层 if 判断,只有当没有登录,即 isLogged 为 false 时候,才进行获取缓存操作。...注意 在上一篇教程中,同学提到没有使用 Taro.cloud.init() 初始化问题,是因为分成了两篇文章,在这篇文章才初始化。要使用小程序云,初始化环境是必要

    2.6K10

    前端实现异步几种方式_redux是什么

    为什么要多用纯函数呢?因为它们具有很强“可预测性”。既然函数,那肯定有不纯函数喽,或者换个说法,叫做“副作用”函数。...); } 我们先看一下watcherSaga:watcherSaga中使用了redux-saga提供API函数takeEvery(),接收到USER_FETCH_REQUESTED action...另一个常用辅助函数takeLatest(),相同action发送过来时,会取消当前正在执行任务并重新启动一个新worker saga。...然后我们看下workerSaga,可以看到并不是直接调用异步函数或者派发action,而是通过call()以及put()这样函数。这就是redux-saga中最为重要一个概念:Effect。...但是这样的话不好做模拟(mock)测试:我们在测试过程中,一般不会真的执行异步任务,而是替换成一个假函数。实际上,我们只需要确保yield了一个正确函数,并且函数有着正确参数。

    1.7K30

    redux-saga_pub culture

    通过这个改变,前端应用代码结构更加清晰,业务层可复用部分增加。当然,Saga对自动化测试也支持很好,可以将逻辑单独使用自动化脚本测试,提高项目质量。...如何使用 redux-sage官方文档很详细使用说明,这里只做简单上手说明。...也可以第三个参数用来传递变量给方法。 call方法 call有些类似Javascript中call函数, 不同是它可以接受一个返回promise函数使用生成器方式来把异步变同步。...put方法 put就是reduxdispatch,用来触发reducer更新store 什么弊端 目前在项目实践中遇到一些问题: redux-saga模型理解和学习需要投入很多精力 因为需要用...action触发,所以会产生很多对于reducer无用action, 但是reducer一样会跑一轮,虽然目前没有观测到性能下降,但还是计算开销 在action定义上要谨慎,避免action在saga

    1.4K10

    Dva 底层是如何组织起 Redux 数据流

    包括: State 数据,通常为一个 JavaScript 对象,操作时候每次都要当作不可变数据(immutable data)来对待,保证每次都是全新对象,没有引用关系,这样才能保证 State 独立性...Reducer 描述如何改变数据函数,接受两个参数:已有结果和 action 传入数据,通过运算得到新 state。 Effects(Side Effects) 副作用,常见表现为异步操作。..., put }) { yield call(delay, 1000); yield put({ type: 'add' }); }, }, }); // 注册视图 app.router...因为我们可以使用 Middleware 拦截 action, 这样一来异步网络操作也就很方便了, 做成一个 Middleware 就行了, 这里使用 redux-saga 这个类库, 举个栗子: 点击创建..., put }) { yield call(delay, 1000); yield put({ type: 'minus' }); }, }, subscriptions

    1.4K10

    react项目架构之路初探

    redux 三大原则:单一数据源,只读state,使用函数来修改 redux是一款 状态管理库,并且提供了react-redux来与react紧密结合,核心部分为Store,Action,Reducer...数据流通关系:通过Store中这个对象提供dispatch方法 =》 触发action=》改变State =》 导致其相关组件 页面重新渲染 达到更新数据效果 核心Api以及相关功能源码分析...Sagas 可以被看作是在后台运行进程,Sagas 监听发起action,然后决定基于这个 action来做什么 在 redux-saga 世界里,所有的任务都通用 yield Effects 来完成...,thunks 是在action被创建时调用,而 Sagas只会在应用启动时调用 redux-thunk中间件可以让action创建函数先不返回一个action对象,而是返回一个函数函数传递两个参数...vuex判断mutationtype 很大相似之处 通过不同类名来达到区分目的 。

    2.5K10

    redux-saga入门

    如果takeLatest传入了其它args参数,那么saga函数参数将这样(args,action)。...call(fn, args):它将创建一个Effect,用来命令中间件以args参数调用fn,fn可以是一个Generator函数也可以是一个返回Pormise任意其他值普通函数。...call创建Effect会命令中间件调用传入函数,并检查其结果,如果结果是迭代器对象或者是Promise实例中间件将一直暂停当前saga直到迭代器对象Promise实例处理完毕。...cancel cancel(task):cancel中参数tasks是可选,如果传参,可以传入一个多个task,这样cancel(task)、cancel(task1,task2,…tasks)...cancel如果没有接受到传参,这样yield cancel(),将取消该代码所在任务,即自取消,如下代码,cancelTask任务将被自取消。

    1.3K20

    更可靠 React 组件:提纯

    你能做只是将非纯代码从纯代码中隔离出来,这一过程又成为提纯(purification)。 ? 孤立非纯代码明确副作用,对全局状态依赖。...站点名称没有定义(比如赋值为 null),头部就不显示。 首先要关注是 是非纯。...纯组件 单元测试非常简单。测试只做了一件事:检验组件是否针对给定输入渲染出期望输出。不需要引入、访问修改全局变量,也没有什么摸不准副作用了。...请求完成后,"FETCH_SUCCESS" action 会被分发: import { call, put, takeEvery } from 'redux-saga/effects'; export...default function* () { yield takeEvery('FETCH', function* () { const response = yield call(axios.get

    1.1K10

    深入理解 redux 数据流和异步过程管理

    所以异步过程比较多,而且异步过程与异步过程之间也不独立,串行、并行、甚至更复杂关系时候,直接把异步逻辑放组件内不行。 不放组件内,那放哪呢?...没有,这段逻辑依然是在组件里写,只不过移到了 dispatch 里,也没有提供多个异步过程管理机制。 解决这个问题,需要用 redux-saga redux-observable 中间件。...那么具体怎么执行就可以随意切换了,这样测试时候只需要模拟传入对应数据,就可以测试 worker saga 了。...redux-thunk 并没有提供多个异步过程管理机制,复杂异步过程管理还是得用 redux-saga 或者 redux-observable。...redux-saga 透传了 action 到 store,并且监听 action 执行相应异步过程。异步过程描述使用 generator 形式,好处是可测试性。

    2.5K10

    dva

    自身有没有做到就不好说了(从choo实现上没看出来什么拆除堡垒有效措施) 在API设计上,dva-core差不多保持最小化了: 一份model仅4个配置项 API屈指可数 hook差不多都是必须...) invariant无差别throw可以用,但warning不建议使用,因为含warningrelease代码不如编译替换干净(还会执行空函数) 另一个技巧是包一层函数,在外面做参数检查,比如示例中...: function start(container) { //...参数检查 oldAppStart.call(app); } 这样好处是把参数检查拿出去了,可读性会更好一些,但有多一层函数调用性能开销...; return function*(...args) { yield put({ type: SHOW, payload: { namespace, actionType } });...yield effect(...args); yield put({ type: HIDE, payload: { namespace, actionType } }); }; } (摘自dva-loading

    1.9K50

    Taro 小程序开发大型实战(六):尝鲜微信小程序云(上篇)

    SET_IS_OPENED:设置登录框开启/关闭信息 我们还从 redux-saga/effects 包中导入了必要函数call:在 saga 函数中调用其他异步/同步函数,获取结果 put:...云函数 开启云函数本地调试 注意 其它操作等你走完整个小程序云开发流程之后,需要编写更加复杂业务逻辑都会遇到,具体可以参考小程序云文档:文档地址[15]。...指的是触发云函数事件,小程序端调用云函数,event 就是小程序端调用云函数传入参数,外加后端自动注入小程序用户 openid 和小程序 appid。...适配异步 action reducer 我们在前面处理登录,在组件内部 dispatch 了 LOGIN action,在处理异步 action saga 函数中,使用 put 发起了一系列更新...到这里我们就把 user 逻辑接入了小程序云,并能成功实现微信小程序端小程序云登录,让我们马上来尝试一下预览本地调试效果预览图: 可以看到,我们在本地调试云函数,以及小程序端接入云函数步骤如下

    2.3K20

    高级前端react面试题总结

    调和阶段 setState内部干了什么调用 setState ,React会做第一件事情是将传递给 setState 对象合并到组件的当前状态这将启动一个称为和解(reconciliation)...,条件嵌套函数中调用Hook,必须始终在 React函数顶层使用Hook这是因为React需要利用调用顺序来正确更新相应状态,以及调用相应钩子函数。...核心思想: Fiber 也称协程或者纤程。它和线程并不一样,协程本身是没有并发或者并行能力(需要配合线程),它只是一种控制流程让出机制。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊redux-saga或者...提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow易测试

    4.1K40

    状态管理概念,都是纸老虎

    如果不对状态进行有效管理,状态在什么时候,由于什么原因,如何变化就会不受控制,就很难跟踪和测试了。如果没有经历过这方面的困扰,可以简单理解为会搞得很乱就对了。...redux-saga 采用了另外一种思路,它没有把异步操作放在 action creator 中,也没有去处理 reductor,而是把所有的异步操作看成“线程”,可以通过普通action去触发它,操作完成也会触发...yield,也没有 return 了,真的骂完了,只能挤出来一个 undefined 了,done: true 代表骂完了 // { value: undefined, done: true } 这样啥好处呢..., put }) { yield call(delay, 1000); yield put({ type: 'minus' }); }, }, subscriptions...如果项目比较小的话,使用 MobX 会比较灵活,但是大型项目, MobX 这样没有约束,没有最佳实践方式,会造成代码很难维护,各有利弊。

    5.3K20

    一文梭穿Vuex、Flux、Redux、Redux-saga、Dva、MobX

    如果不对状态进行有效管理,状态在什么时候,由于什么原因,如何变化就会不受控制,就很难跟踪和测试了。如果没有经历过这方面的困扰,可以简单理解为会搞得很乱就对了。...redux-saga 采用了另外一种思路,它没有把异步操作放在 action creator 中,也没有去处理 reductor,而是把所有的异步操作看成“线程”,可以通过普通action去触发它,操作完成也会触发...yield,也没有 return 了,真的骂完了,只能挤出来一个 undefined 了,done: true 代表骂完了 // { value: undefined, done: true } 这样啥好处呢..., put }) { yield call(delay, 1000); yield put({ type: 'minus' }); }, }, subscriptions...如果项目比较小的话,使用 MobX 会比较灵活,但是大型项目, MobX 这样没有约束,没有最佳实践方式,会造成代码很难维护,各有利弊。

    5.5K10
    领券