使用 Mocks 测试 Jest 和 Typescript

2024-03-30

我正在使用 Typescript 和 Jest 尝试测试我的 Angular 和 Ionic 应用程序的一些组件,但问题不仅限于 Angular 或 Ionic。因此,我正在尝试让 Jest 的模拟功能发挥作用。

我只是创建一个虚拟类,我想尝试模拟函数的响应,看看是否可以覆盖该行为。

玩笑模拟.ts

export class AClass {
    constructor() { }

    GetOne():any {
        return  1;
    }

    GetTwo():any {
        return 2;
    }
}

玩笑模拟.spec.ts

import { AClass } from './jest-mock';

// const mockGet = jest.fn( () => { return 3; } );  // Tried this to return 3?
const mockGet = jest.fn();
jest.mock('./jest-mock', () => {
    return jest.fn().mockImplementation( () => {
        return { GetOne: mockGet };
    });
});

describe('Testing Jest Mock is working', () => {
    it('should support mocking out the component', () => {
        expect(mockGet).toBeTruthy();
        expect(mockGet).toBe(3);                // Mocked Value
    });
});

我只是想创建一个可以更改函数结果的测试,以便其他真实测试代码可以使用我的模拟来提供测试结果。

当我尝试从模拟创建一个类时TestObject = new AClass();

TypeError: _jestMock.AClass is not a constructor

通过上面定义的测试,我收到以下错误:

expect(received).toBe(expected)
    Expected value to be (using Object.is):
      3
    Received: 
      [Function mockConstructor]
    Difference:
       Comparing two different types of values. Expected number but received function.

在检查其他参考资料时,我确实成功地进行了模拟测试。我将 jest-mocks.spec.ts 更改为:

jest.mock('./jest-mock', () => {
    return {                          // Define Function Mock Return Values
        GetOne: jest.fn( () => 3 )
    }
});
const MockObject = require('./jest-mock');

describe('mock function', () => {
    it('should create mock', () => {
        expect(jest.isMockFunction(MockObject.GetOne)).toBeTruthy();
    });

    it('should return mock values', () => {
        expect(MockObject.GetOne()).toBe(3);
        expect(MockObject.GetOne).toHaveBeenCalled();
        expect(MockObject.GetTwo).toBeUndefined();
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Mocks 测试 Jest 和 Typescript 的相关文章

随机推荐

  • 创建自定义复合按钮栏

    我必须在 Android 中创建一个自定义复合按钮栏控件 如下所示here http www coated com wp content uploads 2009 11 slacker radio android application j
  • Mockito - 没有为其中一个测试用例注入模拟

    我有一个 jsf spring 应用程序并使用mockito对于我的单元测试 我不断得到NullPointerException当我运行我的junit测试在iEmployeeService嘲笑 没有Exception for iSecuri
  • python:numpy 列表到数组和 vstack

    from scipy io wavfile import read filepath glob glob wav rates datas for fp in filepath rate data read fp rates append r
  • Nodejs CSV 数据导出系统供用户使用

    我需要允许用户以 csv 格式导出数据 我用nodejs写了应用程序 用户的导出数据可能非常庞大 所以我想知道如何在nodejs中处理这种情况 我应该使用nodejs的process nexttick还是子进程api 还有什么好的模块可用于
  • 当在静态上下文中使用实例方法时,为什么 javac 会发出“错误:类中的方法无法应用于给定类型”?

    考虑以下 无效 Java 程序 public class Test public static void main String args int ints 1 2 3 4 5 print ints public void print in
  • 更新 iOS 分发证书的正确方法

    我的分发证书以及我的所有配置文件将于 6 月 7 日到期 如何正确续订 我现在应该撤销它并申请新的吗 如果我这样做 我所有的实时应用程序都会被删除吗 您的实时应用程序不会被删除 应用商店中的任何内容都不会发生任何变化 一旦它们正式过期 唯一
  • 如何使用递归对数组的偶数和奇数求和

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要帮助创建一个递归函数 该函数接受数字列表 数组并返回元组或类似格式 a b where a是偶数之和并且b是奇数之和 例如 inpu
  • Java Swing:使用相应的键盘按钮时显示按下的按钮

    我正在使用 Swing 用 Ja va 编写一个程序 并使用包含箭头键的 GUI 方向键与键盘上的方向键相对应 当我按下键盘上的向上箭头键时 我希望 GUI 上的向上箭头键显示为被按下 在我释放箭头键之前 它应该显示它仍在被按下 并且当释放
  • 多条路线使用同一个控制器?

    有没有办法编写以下路由 这样您就不必每次都指定相同的控制器 get jobs gt pages jobs get contact gt pages contact get terms gt pages terms get privacy g
  • 如何从 GitHub Actions 中的重定向输出中删除所有无关输出?

    我有一个使用 Terraform 进行部署的 GitHub Actions 工作流程 当 Terraform 完成后 我想获取 Terraform 输出并将其发送到工作流程中的下一个作业 以便可以提取和使用各个部分 具体来说 我的 Terr
  • 如何让 XML 注释出现在不同的项目 (dll) 中?

  • ClusterManager 重新绘制 Google 地图 v2 实用程序的标记

    我正在发出服务器请求 当我收到服务器的响应时 我正在 UI 线程上执行ClusterManager addItem 但这个项目没有在地图上绘制 只有当我进行缩放更新 时 新添加的项目才开始出现 我也尝试调试渲染器 但是onBeforeClu
  • 从 Android 中的 DatePickerDialog 中删除标题

    我想将 DatePickerDialog 限制为明天的最小值 当我输入下面显示的代码时 限制就起作用了 但是 包含日期的标题文本看起来像标题 我怎样才能解决这个问题 这是我的代码 Calendar tempDate Calendar get
  • WASAPI:选择专用输出的波形格式

    我正在尝试使用 WASAPI 打开带有输出设备的独占流 我在选择可接受的格式时遇到了困难 因为似乎没有关于给定设备接受哪些格式的提示 就我而言 IAudioClient GetMixFormat 否则会返回设备的一种默认格式 返回一种不能在
  • 排序错误

    我正在使用 Microsoft SQL Server Management Studio 我有两个数据库 一个是系统数据库 其中包含 master 数据库 另一个是我的数据库 名为CCTNS CAS DE DB 当我尝试通过使用以下工具的工
  • Android 在等待位置时显示进度对话框

    我正在使用以下示例开发基于位置的应用程序 http www androidhive info 2012 07 android gps location manager tutorial http www androidhive info 2
  • C# 中的高质量图形/波形显示组件

    我正在寻找一种使用 C 编写的快速 专业外观且可定制的波形显示组件 我想在时域和频域中主要显示实时音频波形 快 我希望能够缩放 更改轴设置 显示多个通道 自定义感觉和颜色等 有人知道任何事情吗 无论是商业的还是非商业的 谢谢你 Diego
  • 在 Git 中切换分支不会删除目录

    我在 Git 中创建了两个分支 git branch F1 git branch F2 接下来 我切换到 F1 git checkout F1 I rename my UnitTests目录到Tests git mv UnitTests T
  • 使用 LimitedConcurrencyLevelTask​​Scheduler 时延续任务挂起

    我正在研究在 C NET 4 0 中使用 TPL 我创建了一个自定义 API 来简化 Web 请求的创建和下载内容 异步 使用延续任务 那部分工作正常 当我尝试使用时出现的问题LimitedConcurrencyLevelTaskSched
  • 使用 Mocks 测试 Jest 和 Typescript

    我正在使用 Typescript 和 Jest 尝试测试我的 Angular 和 Ionic 应用程序的一些组件 但问题不仅限于 Angular 或 Ionic 因此 我正在尝试让 Jest 的模拟功能发挥作用 我只是创建一个虚拟类 我想尝