笑话:如何模拟类的一个特定方法

2023-12-01

假设我有以下课程:

export default class Person {
    constructor(first, last) {
        this.first = first;
        this.last = last;
    }
    sayMyName() {
        console.log(this.first + " " + this.last);
    }
    bla() {
        return "bla";
    }
}

假设我想创建一个模拟类,其中方法“sayMyName”将被模拟,而方法“bla”将保持原样。

我写的测试是:

const Person = require("../Person");

jest.mock('../Person', () => {
    return jest.fn().mockImplementation(() => {
        return {sayMyName: () => {
            return 'Hello'
        }};
    });
});


let person = new Person();
test('MyTest', () => {
    expect(person.sayMyName()).toBe("Hello");
    expect(person.bla()).toBe("bla");
})

第一个“expect”语句通过,这意味着“sayMyName”已成功模拟。但是,第二个“期望”失败并出现错误:

类型错误:person.bla 不是函数

我知道模拟类删除了所有方法。 我想知道如何模拟一个类,以便仅模拟特定的方法。


Using jest.spyOn()是正确的Jest模拟单个方法并保留其余方法的方式。实际上有两种略有不同的方法。

1.只修改单个对象中的方法

import Person from "./Person";

test('Modify only instance', () => {
    let person = new Person('Lorem', 'Ipsum');
    let spy = jest.spyOn(person, 'sayMyName').mockImplementation(() => 'Hello');

    expect(person.sayMyName()).toBe("Hello");
    expect(person.bla()).toBe("bla");

    // unnecessary in this case, putting it here just to illustrate how to "unmock" a method
    spy.mockRestore();
});

2.修改类本身,使所有实例都受到影响

import Person from "./Person";

beforeAll(() => {
    jest.spyOn(Person.prototype, 'sayMyName').mockImplementation(() => 'Hello');
});

afterAll(() => {
    jest.restoreAllMocks();
});

test('Modify class', () => {
    let person = new Person('Lorem', 'Ipsum');
    expect(person.sayMyName()).toBe("Hello");
    expect(person.bla()).toBe("bla");
});

为了完整起见,这就是模拟静态方法的方式:

jest.spyOn(Person, 'myStaticMethod').mockImplementation(() => 'blah');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笑话:如何模拟类的一个特定方法 的相关文章

  • 将 OoXml 插入单词抛出错误:未知

    我一直在尝试通过office js将OOXML插入到word文档的正文内容中insertOoXML 方法 我什至尝试过最简单的实现 认为我在尝试替换 XML 本身中的 fieldCodes 时做了一些不正确的事情 所有结果都是这样Error
  • JavaScript onTouch 不工作

    谁能告诉我为什么这个 onTouch 处理程序没有触发 var myDiv document getElementById existingContent var myButton a href log out a myDiv append
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • Web 串行 API - 未捕获(承诺中)DOMException:无法打开串行端口/所需成员 baudRate 未定义

    下面的代码可以在我的 Xubuntu 机器上运行 但现在我在 Kubuntu 上 它不再工作了 它不会打开端口 Arduino IDE 工作正常 可以向开发板写入代码 并且我可以在 Chrome 中选择设备 Arduino Uno 但当我尝
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • TimeZoneInfo.GetSystemTimeZones() 如何仅选择特定国家/地区代码的条目?

    TimeZoneInfo GetSystemTimeZones 为您提供所有时区的枚举 问题是如何仅选择特定国家 地区代码的条目 我知道 UTC 偏移量和国家 地区代码 并且需要能够选择正确的时区值 首先 您会发现由于夏令时的变化 可能还有
  • Java Swing Combobox removeAllItems 还调用 ItemStateChanged 吗?

    我的代码实际上很简单 我看到一个简单且相似的代码来自本文 首先 我有 1 个组合框 我有一个听众叫itemStateChanged 我添加到这个监听器中的目的是 当用户从其保管箱中单击 选择 一个项目时执行一些代码 Cmb ItemCate
  • 毕加索本地图片加载速度慢?

    我开发 Android 应用程序已有六年了 并且使用简单的 自制 图像缓存库也有同样长的时间 我最近开始使用一个依赖于 Picasso 的组件 并决定可能是时候切换到通用库了 而不是保留我多年前编写的旧解决方案 我的大多数图像都是存储在可绘
  • 如何在本地机器上使用带有 sdk 的云构建来构建 docker 镜像,而无需尝试它

    我在用着云构建构建 docker 镜像 从以下位置提供的示例中指导自己github 垃圾桶 包装 源代码 cloud google com contrib go opencensus io github com go opencensus
  • JSON.net 直接从 oledbconnection 序列化

    我目前有一个处理程序 它获取 Excel 文件的文件路径和选项卡名 将文件处理到数据表中 然后将表序列化为 json 字符串以返回 这一直有效 直到我尝试处理大文件 然后出现内存不足异常 我在想 如果我不先将所有内容加载到数据表中 而是直接
  • 在 WPF 应用程序中使用 reCaptcha

    我正在寻找如何将 WPF 桌面应用程序与 reCaptcha 集成的解决方案 有人知道解决方案吗 我正在为我的应用程序开发注册模块 并且需要良好且简单的验证码 Thanks See https developers google com r
  • android - EditText 长度过滤器无法正常工作

    首先我不得不说我已经在这里阅读了类似的问题和答案 这个问题基本上是重复的这个问题和许多其他问题 但这些问题的答案并不像我想要的那样 问题 以编程方式在我的 EditText 上设置长度过滤器 如下所示 editText setFilters
  • Windows 中的 Laravel 权限问题 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我从服务器下载了laravel到我本地的windows8 xampp gt htdocs 文件夹 以下是我收到的错误 异常处理程序中的错误 流或文件 C xampp htdocs l
  • phpmyadmin mysql 触发器语法错误

    我正在尝试编写一个 mySQL tigger 但我无法将代码放入 phpMyAdmin MySQL 中而不出现语法错误 有人能帮助我吗 Tables 我的触发器 CREATE TRIGGER after jeu insert ON jeu
  • 如何在 AS3 中完全删除影片剪辑

    我希望删除 mc 及其所有计时器 事件 有没有简单的方法可以做到这一点 当然 取消注册其计时器和事件 将其从其父级中删除 并删除对它的所有引用 也就是说 AS3是一种垃圾收集语言 因此您无法控制对象 包括MC 何时被really从记忆中删除
  • Google Sheets:如何触发随机函数? [复制]

    这个问题在这里已经有答案了 我在 Google 上有一张工作表 并一直在寻找如何使随机化脚本仅在需要时才工作的解决方案 而不是每次打开工作表或刷新它时 这是例子 让我们把工作表看成这样 B5单元有以下代码 index B1 B3 randb
  • 如何修复图像裁剪的放大尺寸?

    我想修复图像裁剪的缩放尺寸 如何做到这一点 我找到了很多并尝试了很多 但仍然无法获得正确的解决方案 裁剪的图像放大太多并变得模糊 请有人帮助我我的这个问题 我的代码是 intent putExtra crop true intent put
  • 电子邮件: Intent.ACTION_SEND 返回值是什么?

    当我启动时 startActivity new Intent Intent ACTION SEND 用于发送电子邮件 这是我可以在中测试的返回值 onActivityResult 因为 例如 如果用户单击 su 取消 退出电子邮件客户端 我
  • 读取文件并通过管道将其发送到父进程的程序

    我需要编写一个程序 创建从命令行向子进程发送文件名的管道 在子进程中读取该文件并使用管道将其发送回 父进程应该打印该文件 如果子进程中发生错误 则必须将错误发送到父进程 这是我的代码 它沿着文件文件打印一些垃圾 并且当我运行它时 它还禁用终
  • 编译Python代码和C++代码一样快吗?

    如果我用 Python 编写一个程序 然后使用以下任何编译器对其进行编译 Gordon McMillan 的安装程序 跨平台 Thomas Heller 的 py2exe Windows Anthony Tuininga 的 cx Free
  • 比较两个字符串数组而不通过每个元素进行索引的最佳方法是什么?

    是否有任何有效的方法可以用于比较两个字符串数组而无需检查每个元素 我尝试使用数组列表 构建对象 但没有一个没有显示出太大的效果 最后 要比较两个字符串 序列 表示字符序列 没有任何提高效率的技巧 你必须somehow遍历两个序列并逐个元素进
  • jQuery 根据文本更改表格单元格文本颜色

    我有一个表 其中包含包含状态的数据列 两个示例状态为 已拒绝 和 已付款 我想要做的是将 已拒绝 的文本颜色更改为红色 将 已付费 的颜色更改为绿色 对于具有此状态的单元格 我向td like td class status Html Di
  • TextView 的 Android 自定义属性[重复]

    这个问题在这里已经有答案了 可能的重复 如何读取Android中的自定义属性 最近我读到了有关自定义属性的内容 我想向 TextView 添加自定义属性 到目前为止我有 属性文件
  • 如何在 C++ 中声明和初始化 2d int 向量?

    我正在尝试做类似的事情 include
  • 笑话:如何模拟类的一个特定方法

    假设我有以下课程 export default class Person constructor first last this first first this last last sayMyName console log this f