首页 > 其他分享 >Typescript 测试驱动开发 TDD (12)

Typescript 测试驱动开发 TDD (12)

时间:2023-09-22 13:00:42浏览次数:41  
标签:12 函数 调用 TDD Typescript 参数 Jest executeCallback mock

Jest模拟 (Jest mocks)


在测试我们的代码时,我们经常遇到这样的情况:我们希望确保某个特定函数被调用,或者它被使用正确的参数进行了调用。当一个特定函数按顺序调用其他函数以执行一些业务逻辑时,这种情况最常见。例如,我们可能会调用一个初始化函数,并且该初始化函数可能会调用多个REST服务来加载数据。在为我们的初始化函数编写测试时,我们希望确保所有对REST服务的调用都已完成。为了确保函数被调用,我们使用Jest模拟技术。

作为我们可以使用Jest模拟的一个示例,请考虑以下类:

1 class MyCallbackClass {
2      executeCallback(
3              value: string,
4              callbackfn:  (value: string) => null
5      ) {
6            console.log(`executeCallback invoking callbackFn`);
7            callbackFn(value);
8      } 
9 }

这里,我们有一个名为MyCallbackClass的类,它有一个名为executeCallback的方法。executeCallback函数接受两个参数,类型分别为字符串的value和callbackFn。executeCallback方法将一个值记录到控制台,并调用传入的回调函数以及传入的字符串值。

让我们来看一下如何使用Jest模拟函数作为callbackFn参数,如下所示:

1 it("should mock callback function", () => {
2     let mock = jest.fn();
3     
4     let myCallbackClass = new MyCallbackClass();
5     myCallbackClass.executeCallback('test', mock);
6 
7     expect(mock).toHaveBeenCalled();
8 });

在这里,我们通过创建一个名为mock的变量来开始我们的测试,该变量被赋值为调用jest.fn函数的结果。jest.fn函数实际上创建了一个模拟函数,可以作为回调函数的快速替代品使用。

我们的测试然后创建了一个名为myCallbackClass的MyCallbackClass实例,
然后调用executeCallback方法,将字符串值'test'和我们的模拟函数作为参数传入。
然后我们在这个模拟函数实例上使用toHaveBeenCalled匹配器,
它会测试executeCallback方法是否真正调用了我们作为参数传入的回调函数。

我们还可以检查传入的参数作为参数调用的函数是否使用了正确的参数,如下所示:

 

1 if("should call testFunction with argument using mock", () => {
2     let mock = jest.fn();
3     
4     let myCallbackClass = new MyCallbackClass();
5     myCallbackClass.executeCallback("argument_1", mock);
6     expect(mock).toHaveBeenCalledWith("argument_1");
7 });

在这里,我们使用的是 toHaveBeenCalledWith 匹配器,而不是之前测试中使用的 toHaveBeenCalled 匹配器。这样可以让我们检查传入作为参数的函数是否以正确的参数被调用。

Jest模拟是一种快速方便的创建回调函数的方式。

 

标签:12,函数,调用,TDD,Typescript,参数,Jest,executeCallback,mock
From: https://www.cnblogs.com/bisslot/p/17721833.html

相关文章

  • Typescript 测试驱动开发 TDD (10)
    测试设置和拆卸(Testsetupandteardown)在运行特定的测试之前,我们可能希望先执行一些代码。这可能是为了初始化一个特定的变量,或者确保对象的依赖关系已经设置好。同样地,我们可能希望在特定的测试运行后执行一些代码,甚至在整个测试套件运行完毕后执行。为了说明这一点,请考虑......
  • macOS Monterey 12.7 (21G816) 正式版 ISO、IPSW、PKG 下载
    macOSMonterey12.7(21G816)正式版ISO、IPSW、PKG下载本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。2023年9月22日,Apple为macOS和iOS......
  • typescript_error_运算符“+”不能应用于类型“Number”和“Number”
    functionadd_(num1:Number,num2:Number){returnnum1+num2}console.log(add_(5,7))Number是一个Interface,number才是表示类型,换成小写就可以了functionadd_(num1:number,num2:number){returnnum1+num2}console.log(add_(5,7))......
  • P1075 [NOIP2012 普及组] 质因数分解
    算法一根据唯一分解定理,小于\(n\)的最大的能整除\(n\)的整数一定就是答案,可以暴力枚举。时间复杂度\(O(n)\),实际得分\(60\)。算法二发现算法一不能通过的原因是较大的那个质数可能的取值范围太大了。而较小的那个质数一定小于等于\(\sqrtn\),我们枚举它即可。时间复......
  • Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执
    Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执行--(CVE-2022-23221)环境概述采用Vulfocus靶场环境进行复现,搭建操作和文章参考具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败。CouchdbCVE-2017-12635权限绕过漏洞概述A......
  • Educational Codeforces Round 123 - D(思维题)
    目录D.CrossColoringD.CrossColoring题意$n\timesm$的方格纸上进行q次操作,每次操作选择某整行x和某整列y,使得行x和列y均涂上k种颜色中的一种。问你最终的方案数思路倒序考虑操作,因为对于同一行或者同一列,后面的操作覆盖前面的操作利用数组标记某行或者某......
  • golang 有没有 类似 typescript 的 联合类型?
    Go语言(Golang)不像TypeScript那样直接支持联合类型(UnionTypes)。在TypeScript中,联合类型允许一个变量具有多个不同的数据类型,而在Go中,通常使用接口(interfaces)和具体类型来处理类似的情况。以下是在Go中处理联合类型的一些方法:使用接口:Go中的接口可以用于定义一组方法的契约,而不是特......
  • [NOIP2012 普及组] 摆花
    [NOIP2012普及组]摆花[NOIP2012普及组]摆花题意有\(n\)个数,每种可以选\(0\lex_i\lea_i\)个,问有多少种方法可以使得\(\sum_{i=1}^nx_i=m\)。Solution1.深搜\(dfs\)显然可以先暴力深搜。#include"bits/stdc++.h"usingnamespacestd;constintmaxn=......
  • AP5101C 高压线性 LED恒流驱动IC 车灯9V 12V 24V车灯驱动芯片
    产品描述AP5101C是一款高压线性LED恒流芯片,外围简单、内置功率管,适用于6-100V输入的高精度降压LED恒流驱动芯片。最大电流2.0A。AP5101C可实现内置MOS做2.0A,外置MOS可做3.0A的。AP5101C内置温度保护功能,温度保护点为130度,温度达到130度时,输出电流慢......
  • shiro-721 CVE-2019-12422
    漏洞描述ApacheShiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。Shiro框架直观、易用,同时也能提供健壮的安全性。ApacheShiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base......