如何用笑话和酶来模拟 React 组件方法

2023-12-26

我有一个反应组件(为了演示问题而进行了简化):

class MyComponent extends Component {
    handleNameInput = (value) => {
        this.searchDish(value);
    };

    searchDish = (value) => {
      //Do something
    }

    render() {
        return(<div></div>)
    }
}

现在我想测试一下handleNameInput() calls searchDish与提供的值。

为了做到这一点,我想创建一个开玩笑模拟功能 https://facebook.github.io/jest/docs/api.html#jestfnimplementation它取代了组件方法。

这是到目前为止我的测试用例:

it('handleNameInput', () => {
   let wrapper = shallow(<MyComponent/>);
   wrapper.searchDish = jest.fn();
   wrapper.instance().handleNameInput('BoB');
   expect(wrapper.searchDish).toBeCalledWith('BoB');
})

但我在控制台中得到的只是SyntaxError:

语法错误

  at XMLHttpRequest.open (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:458:15)
  at run_xhr (node_modules/browser-request/index.js:215:7)
  at request (node_modules/browser-request/index.js:179:10)
  at DishAdmin._this.searchDish (src/main/react/components/DishAdmin.js:155:68)
  at DishAdmin._this.handleNameInput (src/main/react/components/DishAdmin.js:94:45)
  at Object.<anonymous> (src/main/react/tests/DishAdmin.test.js:122:24)

所以我的问题是,如何使用酶正确模拟组件方法?


该方法可以通过以下方式进行模拟:

it('handleNameInput', () => {
   let wrapper = shallow(<MyComponent/>);
   wrapper.instance().searchDish = jest.fn();
   wrapper.update();
   wrapper.instance().handleNameInput('BoB');
   expect(wrapper.instance().searchDish).toBeCalledWith('BoB');
})

您还需要在测试组件的包装器上调用 .update 以便正确注册模拟函数。

语法错误来自错误的分配(您需要将方法分配给实例)。我的其他问题是因为没有打电话.update()在嘲笑该方法之后。

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

如何用笑话和酶来模拟 React 组件方法 的相关文章

随机推荐

  • 在 Google Analytics API 中使用和查询自定义维度

    我正在尝试查询我的 Analytics 通用 以接收按自定义维度排序的指标列表 7月 Google Analytics API 博客 http analytics blogspot com 2013 07 40 new data point
  • 循环图的数据结构和算法

    我需要定义Data Structure and Algorithm for Circular Data Graph对于网络客户端 在服务器上 数据将以 2 列 CSV 格式提供 例如发送方 接收方 最终输出将呈现在JSON格式并发送到网络请
  • 以编程方式设置约束

    我正在尝试如何使用 UIScrollView 经过一番折腾 我终于掌握了窍门 但现在我似乎遇到了另一个障碍 在这个简单的应用程序中 我有一个滚动视图 为了使其工作 我必须将视图的底部空间设置为滚动视图约束为 0 如上所述here https
  • Kotlin 有恒等函数吗?

    Scala 有一个泛型identityPredef 中的函数 def identity A x A A Kotlin 在标准库中有类似的工具吗 当然我可以简单地使用 it 相反 但我发现identity更容易阅读 并且实例化所有这些 lam
  • 根据用户角色和产品类别应用不同的税(Woocommerce)

    如果用户具有特定角色 但仅限于某些产品类别 我需要应用不同的税 示例 如果具有 Vip 角色的客户 A 购买 Bravo 或 Charlie 类别的商品 则适用的税费将为 4 而不是 22 这是我写的代码 另一部分是在谷歌上找到的 但我不明
  • 猫鼬更新 MongoDB 中的字段不起作用

    我有这个代码 var UserSchema new Schema Username type String index true Password String Email String Points type Number default
  • 重置 MySqli 指针?

    我在重置指针方面遇到了一些困难 我想这样做是因为我将在同一脚本中使用同一查询两次 据我所知 我可以在循环获取数组后重置指针来做到这一点 如果有更好的方法来做到这一点 我很想听听 无论如何 这就是我得到的 getEvent connectio
  • 设置默认样式键的方法之间的差异

    我正在创建一个自定义控件 源自Control 并想要为控件定义默认主题 以前我创建的所有自定义控件 我都使用过 static IntegerUpDown DefaultStyleKeyProperty OverrideMetadata ty
  • UIScrollView setContentSize 因未捕获的 NSRangeException 崩溃

    删除 UIScrollView 的某些内容后 调用 setContentSize 会使应用程序崩溃 int toolbarHeight self navigationController toolbar frame size height
  • Android Fragments API 无法正确显示背景 9patch 图像

    我正在将现有的 Android 应用程序以及片段 API 和兼容性库移植到 honeycomb 我使用相同的布局 但将其加载到片段中 背景是 9 块图像 但现在仅覆盖屏幕的左上四分之一 背景的其余部分是白色的 如果我将背景更改为十六进制颜色
  • 如何更新 phpunit?

    我已经尝试过了一切 包括https stackoverflow com a 8740349 251311 https stackoverflow com a 8740349 251311以及所有可能的通道升级和清除缓存命令 但仍然 sudo
  • 如何使用spark sql获取多个表

    我正在使用 pyspark 从 mysql 获取数据 该数据仅适用于一张表 我想从 mysql 数据库获取所有表 不想一次又一次的调用jdbc连接 请参阅下面的代码 是否可以简化我的代码 先感谢您 url jdbc mysql localh
  • 如何从父进程获取子进程

    是否可以在shell脚本中从父进程id获取子进程id 我有一个要使用 shell 脚本执行的文件 这会导致一个新进程process1 父进程 这process1已经分叉了另一个进程process2 子进程 使用脚本 我能够获得 pidpro
  • Laravel 雄辩的“WHERE NOT IN”

    我在编写查询时遇到问题laravel eloquent ORM 我的查询是 SELECT book name dt of pub pub lang no page book price FROM book mast WHERE book p
  • 使用 firebase 函数将数据推送到 Firestore

    您好 我是新的 firebase 函数 并尝试将数据推送到 firestore 通过下面的代码 我可以将消息推送到 firestore 并且它正在工作 exports addMessage functions https onRequest
  • 使用 DispatchingAndroidInjector<> 和其他 dagger.android 类有哪些优点?

    我正在努力将 Dagger 2 设置到我的 android 项目中 这是我第一次使用这个框架 到目前为止一切都很顺利 但是我在项目中设置这个框架的方式上看到了不同的方法 我想知道哪一个更好 因为我比较了这两种方法 对我来说结果是一样的 我遵
  • AWS 应用程序负载均衡器侦听器规则路径

    配置应用程序负载平衡器 我有 3 个独立的目标组和大约 30 条我想要过滤的不同路径 填写时path pattern可能的值是什么 鉴于它被称为 模式 给人的印象是它可以接受正则表达式 但验证阻止了这种情况 是否可以将多个路径与目标组匹配
  • 在 Java 中按“;”拆分字符串,但不按“\\;”拆分字符串

    在Java中我尝试尝试使用String split 方法分割字符串 但不是在 2 个反斜杠后跟一个分号 Ex aa bb cc dd ee ff 应分为 aa bb cc dd ee ff 如何使用正则表达式来完成此操作 Markus Us
  • FacesContext 有何用途?

    What is FacesContext用于 它具体是在哪里实现的 引自第6 1章JSF 2 0 规范 http jcp org aboutJava communityprocess final jsr314 index html 面孔上下
  • 如何用笑话和酶来模拟 React 组件方法

    我有一个反应组件 为了演示问题而进行了简化 class MyComponent extends Component handleNameInput value gt this searchDish value searchDish valu