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

使用redux-saga-test-plan,我有一个将函数作为参数的分派操作。这使得测试总是失败。

redux-saga-test-plan是一个用于测试Redux Saga的工具库。在使用redux-saga-test-plan进行测试时,如果你的分派操作中包含将函数作为参数的情况,可能会导致测试失败。

这个问题的原因是redux-saga-test-plan默认不支持将函数作为参数的情况。为了解决这个问题,你可以使用redux-saga-test-plan提供的provide方法来模拟函数的返回值。

下面是一个示例代码,展示了如何使用redux-saga-test-plan来测试一个将函数作为参数的分派操作:

代码语言:txt
复制
import { expectSaga } from 'redux-saga-test-plan';
import { call } from 'redux-saga/effects';
import { mySaga } from './mySaga';
import { myFunction } from './myFunction';

// 模拟myFunction的返回值
const mockReturnValue = 'mocked value';

// 测试用例
it('should dispatch action with mocked value', () => {
  return expectSaga(mySaga)
    .provide([
      // 模拟调用myFunction时返回mockReturnValue
      [call(myFunction), mockReturnValue],
    ])
    .put({ type: 'MY_ACTION', payload: mockReturnValue })
    .dispatch({ type: 'MY_ACTION_WITH_FUNCTION' })
    .run();
});

在上面的示例中,我们使用provide方法来模拟了调用myFunction时的返回值为mockReturnValue。然后,我们使用put方法来断言是否正确地派发了一个带有模拟返回值的action。

需要注意的是,mySaga是你要测试的Saga函数,myFunction是你要模拟的函数。

这样,你就可以使用redux-saga-test-plan来测试包含将函数作为参数的分派操作了。希望这个答案能够帮助到你!如果你还有其他问题,请随时提问。

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

相关·内容

行为型设计模式-策略模式(Strategy Pattern)

策略模式策略模式:百度百科中引述为:指对象某个行为,但是在不同场景中,该行为不同实现算法。策略模式是对算法包装,是把使用算法责任和算法本身分割开来,委派给不同对象管理。...策略模式通常把一个系列算法包装到一系列策略类里面,作为一个抽象策略类子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。...而它优化点是抽象了出了接口,业务逻辑封装成一个一个实现类,任意地替换。在复杂场景(业务逻辑较多)时比直接 if else 来好维护些。就是几个if else场景需要用到策略模式? ...想小伙伴们经常有这样不满,业务逻辑就3 4 行,你给我整一大堆类定义?必要这么麻烦吗?看具体业务逻辑还需要去不同类中,简单点行不行。...接下来举几个在业务中经常遇到if else场景,并用Map+函数式接口方式来解决它有的小伙伴会说,判断条件多个啊,而且很复杂,你之前举个例子只有单个判断逻辑,而我多个判断逻辑该怎么办呢?

14120

Java设计模式(二十一)----访问者模式

print()方法一个参数是str,它类型是String。   ...在一个支持动态单分派语言里面,两个条件决定了一个请求会调用哪一个操作:一是请求名字,二是接收者真实类型。单分派限制了方法选择过程,使得只有一个宗量可以被考虑到,这个宗量通常就是方法接收者。...在Java语言里面,如果一个操作是作用于某个类型不明对象上面,那么对这个对象真实类型测试仅会发生一次,这就是动态分派特征。...但是仅仅返传了一下球,并不能解决双重分派问题。关键是怎样利用两次调用,以及Java语言动态单分派功能,使得在这种传球过程中,能够触发两次单分派。   ...●抽象节点(Node)角色:声明一个接受操作,接受一个访问者对象作为一个参数。   ●具体节点(ConcreteNode)角色:实现了抽象节点所规定接受操作

764100

彻底搞懂Redis线程模型

尽管多个文件事件可能会并发地出现,但I/O多路复用程序总是会将所有产生事件套接字都推到一个队列里面,然后通过这个队列,以有序(sequentially)、同步(synchronously)、每次一个套接字方式向文件事件分派器传送套接字...使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前数据轮询进行处理。...一般需要在过期时间上加一个随机值,使得过期时间分散一些。...Redis事务可以一次执行多个命令,以下特点: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余命令依然被执行。...事务可以理解为一个打包批量执行脚本,但批量指令并非原子化操作,中间某条指令失败不会导致前面已做指令回滚,也不会造成后续指令不做。

1K50

java行为型模式---访问者模式(二)

首先在客户程序中将具体访问者模式作为参数传递给具体元素角色(加亮地方所示)。便完成了一次分派。   ...进入具体元素角色后,具体元素角色调用作为参数具体访问者模式中visitor方法,同时将自己(this)作为参数传递进去。具体访问者模式再根据参数不同来选择方法来执行(加亮地方所示)。...便完成了第二次分派。    五、优缺点及适用情况   先来看下访问者模式使用能否避免引言中痛苦。...而且每个具体访问者角色都对应于一个相关操作,因此如果一个操作需求变,那么仅仅修改一个具体访问者角色,而不用改动整个类层次。   看来访问者模式确实能够解决我们面临一些问题。   ...2) 需要对一个对象结构中对象进行很多不同并且不相关操作,而你想避免让这些操作“污染”这些对象类。Visitor使得你可以将相关操作集中起来定义在一个类中。

20620

碾压 Python!为什么 Julia 速度这么快?

Julia 可以做到,为什么其他脚本语言做不到? 你能提供基准测试来证明它速度吗? 似乎有违 “天底下没有免费午餐” 道理。它真的那么完美吗?...但是,在本文示例中,我们看到 Julia 并不总是像其他脚本语言那样,我们必须接受 “午餐不全是免费” 事实。 要看出它们之间区别,我们只需要看看基本数学运算。...事实上,Julia 核心思想是这样: 多重分派允许一种语言函数调用分派给类型稳定函数。 这就是 Julia 核心思想,现在让我们花点时间深入了解一下。...接受抽象类型作为参数函数无法知道元素类型(在这个例子中,元素要么是浮点数,要么是整数),这个时候,多重分派优化在这里起不到作用,所以 Julia 此时性能就不如其他脚本语言。...假设我们一个 Vector {Union {Float64,Int}} 类型 a,并且可能遇到必须使用 a 情况,需要在 a 每个元素上执行大量操作

2.3K10

一起学设计模式 - 访问者模式

主要解决 现已稳定数据结构和易变操作耦合问题,把数据结构和作用于结构上操作解耦合,使得操作集合可相对自由地演化。 UML结构图 ?...在访问者模式中,客户端具体状态当做参数传递给具体访问者,这里完成第一次分派,然后具体访问者作为参数具体状态中方法,同时也 将自己this作为参数传递进去,这里就完成了第二次分派。...总结 访问者模式把数据结构和作用于结构上操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化系统。因为访问者模式使得算法操作增加变得容易。...破坏封装: 访问者模式通常需要对象结构开放内部数据给 访问者和 ObjectStructrue,破坏了对象封装性。 使用场景 数据结构稳定,作用于数据结构操作经常变化时候。...当一个数据结构中,一些元素类需要负责与其不相关操作时候,为了这些操作分离出去,以减少这些元素类职责时,可以使用访问者模式。

36110

Apple 官方指南 - Dispatch Queues

更重要是,线程编程模型需要创建两个线程,需要申请内核和用户空间内存。分派队列则不需要付出这种创建线程内存代价,它们使用线程总是处于占用状态并且不会阻塞。...dispatch_queue_create 函数两个参数一个是队列名称,另一个是队列一组属性。调试器和性能工具会显示队列名称来帮你跟踪你任务是如何被执行。...这一节向你展示一些关于任务分派分派队列技术并将向你阐述它们优点。 向分派队列添加单个任务 # 两种方式可以向分派队列添加任务:异步或同步。...所以当你需要在已经在队列上下文中执行代码里调用这两个函数时候需要非常小心。如果你正在执行当前代码队列作为参数传入这两个函数而且这个队列又是串行队列的话,那该调用造成队列死锁。...如果你在测试中发现上述情况属实,那么你可以考虑以加大步长方式增加循环每一次迭代所处理工作量。你可以多次迭代合并到一个块里并加大步长,这将相应地减少迭代次数。

21020

架构整洁之道导读(一)

Dijkstra在论文Go To Statement Considered Harmful中证明了goto语句阻止了大程序递归分解成更小可证明单元,意味着大量使用goto语句程序是不能被证明...一旦测试用例导致程序单元出错,那么我们就可以修正程序,让程序更加接近真相。或许就是TDD(测试驱动开发)妙处所在吧。...继承是一种函数(过程或者API)复用方式,以前我们想在多个结构相似的数据上使用同样函数,需要通过强制转换到函数可接收数据类型(结构体指针)上,必然存在风险。...多态(polymorphism)是一种将不同特殊行为和单个泛化记号相关联能力,和多态概念对应参考实现——运行哪段代码决策叫做分派,大部分分派基于类型,也可以基于方法参数个数及其类型,而分派具体执行过程则仰仗函数指针...函数一个显著特点就是不可变性。不可变性意味着更多内存消耗,更差性能?其实不尽然。

1.6K80

【Rust笔记】意译解构 Object Safety for trait

【静态分派】 — 以where Self: Sized限定trait method隐式类型参数Self 同一个trait定义动/静两用,没毛病!...若supertrait是泛型trait,那么supertrait泛型类型参数实参一定不能是Self,因为Self编译时类型不确定和不能作为单态化参数。...静态分派trait method 因为trait【关联函数缺省抽象形式是【动态分派】,所以 @Rustacean 需要显式地trait method隐式类型参数Self限定为Sized。...即,trait method函数体对trait实现类类型信息不知。 “不知”即是“安全”。“对象安全”还真不如意译为“对象不知”。多有趣呀!...所以,Object safe trait重要原则之一,就是: 要么,没有非成员方法关联函数 要么,显式地书面限定每个非成员方法关联函数隐式类型参数Self为Sized。例程11 否则,编译失败

17230

Julia(面向对象)

对于不同类型参数,相同概念函数操作实现方式通常非常不同:添加两个整数与添加两个浮点数很大不同,这两个区别都不同于整数添加到浮点数。...多重分派对于数学代码特别有用,在数学代码中,人为地认为操作“属于”一个参数比其他任何参数都没有多大意义:加法运算中加法运算是否比它x + y属于x更多y?...对于一对参数值,此通用方法没有其他任何可能方法定义那么具体,因此仅在没有其他方法定义适用参数对上调用它。 尽管似乎是一个简单概念,但对值类型多次分派可能是Julia语言最强大核心功能。...此行为实现是“世界年龄计数器”。这个单调增加值会跟踪每个方法定义操作允许“对给定运行时环境可见方法定义集”描述为一个数字或“世界年龄”。...这种设计一个风险是,如果没有合适促进方法变换可能性x和y同一类型,所述第二方法无限递归自身和触发堆栈溢出。Base.promote_noncircular可以使用非导出功能作为替代。

4.4K40

图解Java设计模式之访问者模式

,得到他们对该歌手不同评价(评价不同种类,比如成功、失败等) 2)传统方案 ?...2)ConcreteVisitor :是一个具体访问值,实现每个Visitor 声明操作,是每个操作实现部分。...这里我们使用到了双分派,即首先在客户端程序中,具体状态作为参数传递Woman中(第一次分派) * 2....然后Woman 类调用作为参数 “具体方法” 中方法getWomanResult,同时将自己(this)作为参数传入,完成第二次分派 * @author zhaozhaohai * */ public...假设要添加一个Wait状态类,考察Man类和Woman类反应,由于使用了双分派,只需增加一个Action子类即可在客户端调用即可,不需要改动任何其他类代码。 ?

47920

透过 Rust 探索系统本原:泛型

他说,目前我们走了三步: 第一步,通用计算机体系结构:内存视作一组连续可寻址空间 第二步,通用计算机语言:使用指针作为统一引用类型标识符 第三步,泛型编程 今天我们就来讲讲泛型编程。...参数化类型 我们先看参数化类型。参数化类型是指定义数据结构或者类型时候,不指定具体类型,而是将其作为参数使用使得该定义对各种具体类型都适用。...泛型函数 静态分派 函数操作对象是类型,当数据类型使用泛型时,使用作为参数或者返回值函数,也被称之为泛型函数,比如: fn generic(t: T) { todo!...编译器在编译时就能捕获到使用类型,从而进行对应处理,被称之为静态分派(static dispatch)。不同语言对静态分派处理很不一样。...当我们要使用这个接口做动态分派时,我们可以像如下例子一样,一个具体类型(concrete type,比如 Vec)引用,赋给 Write 接口: ?

1.1K40

PLSQL编码规则

单元测试     于是,便遵循表1中命名约定,同时使用这些缩写。...尽量使用在程序声明部分定义局部模块、过程和函数。     假定在编制一个呼叫中心应用程序。...如果某员工工作量低于平均工作量,便下一待处理呼叫分派给此人,并基于这种情况安排约定。"     从以前工作中获悉:朋友Claudia已经编写了一个分析包,它会返回工作量方面的信息。...但是分派待处理呼叫和安排约定都是全新工作,需求文档其余部分对此进行了详细说明。     最初想把15页内容全都看完,但我没有那样做。...很快,局部过程了它自己局部过程和函数,但在该过程每一步,代码都很短、可读、易于测试、可根据需要进行调整。     4.  找一位好伙伴     计算机并不会编程,人才会。

1K20

Java 最困扰你那些事

非暴力不合作 遇到最大麻烦就是如何一起使用基本元素和对象。例如, 把一个char[] 类型变量转换成一个列表别提多费劲了,而且感觉这种操作根本没必要这么麻烦。...还希望 Java 可以支持智能打包返回值,这样我们就可以像在Perl中那样返回一个包含多个值列表了。 希望使用异常标准库还可以在不适合抛出异常场景下使用并能够处理失败。...事实上,在Java 中你根本不能在泛型中实例化一个类,除非你把这个类作为参数来声明一个泛型。 你很难给一个类加上结构函数并让它销毁这个类。RAII(一种资源管理模式,见 C++)却一直非常有用。...没有操作符重载。C++ 允许你是 == 操作符用于比较字符串。同样,大整数运算因为同样原因变很难使用。 呃, 好吧 没有无符号基础类型。尼玛是闹哪样啊!...比如在 Samlltalk 中调用一个具有两个参数函数,可以这样做: myInstance myMethodWithFoo: arg1 Bar: arg2 在 Python中你可以使用下面的语法来调用函数并给函数参数赋值

81980

SetTimer得注意两个坑

第一坑,工作线程使用SetTimer,没有消息循环是不会触发执行定时器处理代码。...消息分派时首先根据消息窗口句柄,也就是SetTimerAPI第一个参数,如果窗口句柄非空就将WM_TIMER分派到该窗口处理函数WndProc,如果窗口句柄为空就回调SetTimer API第四个参数...第二坑,SetTimer返回值并不总是定时器ID,也不一定跟第二个参数nIDEvent相同。 SetTimer API参数和返回值,依第一个参数窗口句柄是否为空有很大区别。...如果窗口句柄非空,定时器ID就是设置第二个参数nIDEvent值,返回值表示SetTimer调用是否成功。如果窗口句柄为空,定时器ID就是返回值。...定时器ID搞错了,会导致KillTimer失败。所以使用SetTimer在主线程一般窗口句柄,而工作线程一般没有窗口句柄,调用方式是不同

3.3K10

Redis 线程模型

[外链图片转存失败,源站可能有防盗链机制,建议图片保存下来直接上传(img-UZyVpkKu-1609933352074)(data:image/gif;base64,R0lGODlhAQABAPABAP...【5】API:ae.c/aeCreateFileEvent 函数接收一个套接字描述符、 一个事件类型、 以及一个事件处理器作为参数, 将给定套接字给定事件加入到 I/O 多路复用程序监听范围之内,...ae.c/aeDeleteFileEvent 函数接收一个套接字描述符和一个监听事件类型作为参数, 让 I/O 多路复用程序取消对给定套接字给定事件监听, 并取消事件和事件处理器之间关联。...| AE_WRITABLE ; ae.c/aeWait 函数接受一个套接字描述符、一个事件类型和一个毫秒数为参数, 在给定时间内阻塞并等待套接字给定类型事件产生, 当事件成功产生, 或者等待超时之后..., 当至少一个事件产生, 或者等待超时后, 函数返回。

50420

JavaScript 编程精解 中文第三版 十九、项目:像素艺术编辑器

大多数构造器还会接受一些其他值,这些值不会随着时间而改变,例如它们可用于分派操作函数。 每个组件都有一个setState方法,用于将其同步到新状态值。...它们作为一个对象而提供,该对象将出现在下拉字段中名称,映射到实现这些工具函数。 这个函数接受图片位置,当前应用状态和dispatch函数作为参数。...数字toString方法可以传入进制作为参数,所以n.toString(16)产生十六进制字符串表示。...它在点击时分派撤消操作,并在没有任何可以撤销东西时禁用自身。...startPixelEditor函数利用它来接受一个对象,包含许多可选属性作为参数。 例如,如果你未提供tools属性,则tools绑定到baseTools。

3K10

聊聊 C# 中 Visitor 模式(访问者模式)

case永远无法被访问情况,造成了额外精力成本 尝试使用重载版本 有鉴于上面type-switch版本问题,作为敏锐程序员,可能马上有人就会提出重载方案:“如果我们针对每个具体DocumentElement...); void DoSomething(this, string); 在多态中实现this指针动态绑定,其实是针对函数一个参数进行运行时动态绑定,这个也是单分派定义。...所以,为了在本不支持双分派C#中实现双分派,我们需要添加一个跳板函数,通过这个函数,我们让第二参数充当被调用对象,实现动态绑定,从而找到正确重载函数,我们需要引出今天主角,Visitor模式。...,通过调用被访问基类Accept方法,被访问基类通过语言分派,动态绑定了正确被访问子类,接着在子类方法中,第一参数当做执行对象再调用一次它方法,根据语言分派机制,第一参数也能被正确动态绑定类型...希望大家通过这篇文章,能对Visitor模式一定了解,在实践中可以恰当使用

47820

聊聊 C# 中 Visitor 模式

case永远无法被访问情况,造成了额外精力成本 尝试使用重载版本 有鉴于上面type-switch版本问题,作为敏锐程序员,可能马上有人就会提出重载方案:“如果我们针对每个具体DocumentElement...); void DoSomething(this, string); 在多态中实现this指针动态绑定,其实是针对函数一个参数进行运行时动态绑定,这个也是单分派定义。...所以,为了在本不支持双分派C#中实现双分派,我们需要添加一个跳板函数,通过这个函数,我们让第二参数充当被调用对象,实现动态绑定,从而找到正确重载函数,我们需要引出今天主角,Visitor模式。...,通过调用被访问基类Accept方法,被访问基类通过语言分派,动态绑定了正确被访问子类,接着在子类方法中,第一参数当做执行对象再调用一次它方法,根据语言分派机制,第一参数也能被正确动态绑定类型...希望大家通过这篇文章,能对Visitor模式一定了解,在实践中可以恰当使用

19010

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券