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

Typescript 测试驱动开发 TDD (9)

时间:2023-09-21 14:24:29浏览次数:33  
标签:objA Typescript TDD toBe objB expect 测试 id

匹配器 (Matchers)

 

1. toBe
Jest 使用所谓的匹配器来将测试中的预期值与接收到的值进行匹配。让我们快速看一下其中一些匹配器,如下所示:

1 it("should match with toBe", () => {
2     expect(1).toBe(2);
3 });

在这里,我们使用toBe匹配器来测试值1是否与值2相同。显然,这个测试将会失败,并显示以下消息:

expect(received).toBe(expected)   // Object.is equality
Expected: 2
Received: 1

在这里,我们可以看到Jest期望值为2,但实际接收到的是1。有趣的是,这条消息中toBe匹配器使用了Object.is相等性。这意味着以下测试将通过:

1 it("should match with toBe using assignment", () => {
2    let objA = {id: 1};
3    let objB = objA;
4    expect(objA).toBe(objB);
5 });

在这里,我们正在创建一个名为objA的对象实例,并将其值分配给另一个名为objB的变量。这意味着变量objA和objB都指向内存中的同一个对象。我们可以尝试使用toBe匹配器来比较两个不同的对象,如下所示:

1 it("should match with toBe", () => {
2     let objA = {id: 1};
3     let objB = {id: 1};
4     expect(objA).toBe(objB);
5 });

在这里,objA和objB具有相同的结构,并且它们具有相同的值,但它们不是内存中的同一个对象。这个测试将产生以下测试失败:

expect(received).toBe(expected)   //Object.is equality
If it should pass with deep equality, replace "toBe" with
"toStrictEqual"
Expected: {"id": 1}
Received: serializes to the same string

 

2. toEqual

在这里,我们可以看到我们的测试失败了,因为objA和objB是两个不同的对象。Jest的错误输出也建议我们将toBe替换为toStrictEqual。然而,我们可以使用toEqual匹配器来达到相同的结果,如下所示:

1 it("should match with toEquala", () => {
2     let objA = {id: 1};
3     let objB = {id: 1};
4     expect(objA).toEqual(objB);
5 });

在这里,我们的测试通过了,因为toEqual匹配器会正确地将两个对象的形状和值解释为相等。

 

3. toContain和 toContainEqual
Jest还提供了许多变体的toContain匹配器,用于测试一个值是否包含在另一个值中,如下所示:

1 it("should contain a value", () => {
2     expect("abcde").toContain("cde");
3 });

在这里,我们的测试期望值 "abcde" 包含值 "cde"。我们也可以将这个概念应用到数组上,如下所示:

1 it("should contain an array item", () => {
2    let objArray = [
3        {id: 1},
4        {id: 2}
5    ];
6    
7    expect(objArray).toContainEqual({id: 2}) ;
8 });

在这里,我们有一个名为objArray的对象数组,并且我们的测试期望objArray数组应该包含值{id: 2}。请注意,在这种情况下,我们使用了toContainEqual匹配器,用于检查数组是否包含特定项。

 

4. not

请注意,使用not属性可以对任何期望进行反转,如下所示:

1 it("should not contain a value", () => {
2    expect("abcde").not.toContain("123");
3 });

在这里,我们期望值 "abcde" 不包含值 "123"。
Jest的所有匹配器都可以使用not属性作为前缀,以测试不相等性。

5. toThowError
匹配器还具有在抛出错误时进行测试的能力。考虑以下函数:

1 function throwError() {
2    throw new Error("this is an error");
3 }

在这里,我们有一个名为throwsError的函数,它会抛出一条带有消息"this is an error"的错误。我们可以编写一个测试来验证是否会抛出该错误,如下所示:

1 it("should throw an error", () => {
2    expect(
3        () => {throwError() }
4    ).toThrowError(new Error("this is an error"));
5 });

在这里,我们有一个使用名为 toThrowError 的匹配器的测试,用于测试函数 throwsError 是否确实抛出了错误,并且错误消息是正确的。
请注意,在 expect 中我们提供了一个调用 throwsError 函数的匿名函数。当测试是否会抛出错误时,我们必须将调用抛出错误的函数包装在一个匿名函数中,否则测试本身将无法正确执行。

 

标签:objA,Typescript,TDD,toBe,objB,expect,测试,id
From: https://www.cnblogs.com/bisslot/p/17719803.html

相关文章

  • Typescript 测试驱动开发 TDD (8)
    强制运行和跳过测试 (Forcingandskippingtests)在处理一个已经编写了多个测试的应用程序时,我们通常只想运行特定的测试或者一组特定的测试。这种操作被称为强制运行测试,因为我们要求整个测试套件只运行指定的测试。可以通过以下两种方式来实现:1describe("agroupoftest......
  • Typescript 测试驱动开发 TDD (7)
    分组测试(Groupingtests)在一个测试规范文件中,我们可能希望将我们的测试分组为逻辑集合。Jest使用describe函数来实现这个目的,如下所示的测试代码:1describe("agroupoftests",()=>{2test("firsttest",()=>{3expect("stringvalue").toEqual("......
  • Typescript 测试驱动开发 TDD (6)
    观察模式(Watchmode)Jest和其他测试框架一样,也可以在观察模式下运行。这意味着它会监视项目中的所有文件,并在任何文件更改时自动重新运行任何测试。让我们按照以下方式更新我们的package.json文件:{..."scripts":{"test":"jest--watchAll--verbose"......
  • 记录 umi4 ant design pro typescript 在 vscode 代码提示错误的问题
    原因是vscode使用的ts版本与项目不匹配。修复方法:在vscode拓展【左侧4个方框的图标】搜索typescript下载安装插件JavaScriptandTypeScriptNightly然后使用ctrl+shift+p调出命令,使用SelectTypeScriptversion命令选择项目应用的typescript版本。选择使用工作区版......
  • Typescript 测试驱动开发 TDD (5)
    ts-jestJest是一个JavaScript测试框架,因此它会在我们的项目中寻找JavaScript测试来运行。我们可以运行TypeScript编译器生成JavaScript文件,或者使用像ts-jest这样的框架。ts-jest是一个TypeScript到Jest的桥接工具,它将负责编译步骤和与Jest的集成。事实上,ts-je......
  • Typescript 测试驱动开发 TDD (4)
    JestJest是一个简单易配置且功能强大的JavaScript单元测试框架,它构建在流行的Jasmine框架之上。Jasmine已经存在很长时间了,是一个成熟、功能齐全且广泛使用的测试框架。Jest通过使配置更加容易,并提供丰富的额外功能来增强Jasmine。Jest还可以并发运行测试,这显著加快了测试套件运......
  • k8s部署mongodb 测试
    挂载mongodb配置文件的cm[root@master01kx]#catmongodb-config.yamlapiVersion:v1kind:ConfigMapmetadata:name:mongo-config-producenamespace:chongqinglabels:app:mongo-producedata:mongodb.conf:|-dbpath=/data/middleware-data/mongo......
  • 专业第三方软件检测机构验收测试怎么做?
    验收测试的目的一、专业第三方软件检测机构验收测试怎么做?受业主委托,以第三方立场,在信息系统集成调试后、交付运行前,通过人工或工具测试手段,从系统功能和非功能需求设计方面,对程序的实际与预期输出进行比较验证,发现差别和错误,客观评估和衡量软件的质量是否满足预期要求。二、......
  • 回归测试策略指南
    作为一名软件测试人员,我们需要进行回归测试,以确保代码修改后软件的既有功能不会受到影响。那么如何设计和执行有效的回归测试策略呢?本文将为大家提供一些专业建议。明确回归测试的范围回归测试不可能也不需要对软件做完整测试,要识别出核心功能和关键业务场景,将回归测试的范围控......
  • greenplum到oracle的dbi_link的配置、调试与测试
    为了解决greenplum到oracle的数据库的数据互联互通的问题,特提供的dbi_link做了研究与测试,dbi_link的基本原理是用Perl的DBI和相应数据库的DBD来访问异构数据库,实现数据的互访与数据传递,这次研究的目的是想解决oracle数据仓库到greenplum的数据传输的问题,这次的研究大概可以分为以......