将react-hooks-testing-library与jest.spyOn一起使用 - 不调用间谍

2024-03-30

我在设置单元测试以确定是否使用正确的参数调用函数时遇到问题。useAHook返回函数foo它调用函数bar。代码看起来像这样

//myModule.js
export const useAHook = (arg1, arg2) => {
  const foo = useCallback(() => {
    bar(arg1, arg2);
  }, [arg1, arg2]);

  return foo;
}

export const bar = (a, b) => {
   //does some stuff with a and b
}

我正在尝试使用此代码进行单元测试renderHook and jest.spyOn。我想确认调用函数foo结果是bar被用正确的参数调用。我的单元测试看起来像这样

//myModule.spec.js

import * as myModule from './myModule.js'

it('should call foo with correct arguments', () => {
  const spy = jest.spyOn(myModule, 'bar');
  const { result } = renderHook(() => myModule.useAHook('blah', 1234));
  const useAHookFunc = result.current;

  useAHookFunc();

  // fails, spy is not called
  expect(spy).toBeCalledWith('blah', 1234);
});

结果是测试失败了spy从未被调用过。我在这里做错了什么或者错误地使用了任一工具吗?


这行:

import * as myModule from './myModule.js'

...导入模块绑定myModule.js into myModule.

然后这一行:

const spy = jest.spyOn(myModule, 'bar');

...包裹着模块导出 for bar在间谍...

...但是间谍永远不会被召唤,因为useAHook不调用模块导出 for bar,它只是调用bar直接地。


如果你修改useAHook调用模块导出bar然后间谍就会被叫来。

有几种方法可以做到这一点。

你可以移动bar进入它自己的模块...

...或者您可以导入模块绑定myModule.js所以你可以调用模块导出bar:

import { useCallback } from 'react';

import * as myModule from './myModule';  // <= import the module bindings

export const useAHook = (arg1, arg2) => {
  const foo = useCallback(() => {
    myModule.bar(arg1, arg2);  // <= call the module export for bar
  }, [arg1, arg2]);

  return foo;
}

export const bar = (a, b) => {
   //does some stuff with a and b
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将react-hooks-testing-library与jest.spyOn一起使用 - 不调用间谍 的相关文章

随机推荐

  • Android CDT:可以在没有 bash 的情况下使用 ndk-build (Windows 中的 Eclipse)吗?

    我在 Windows 上使用 android ndk 版本 r7b 我听说从这个版本开始 您不需要 cygwin 或 bash 来运行 ndk build 可执行文件 但也许我错了 无论如何 我似乎无法仅使用 ndk build 作为命令行
  • ggplot2 方面的问题和关闭裁剪

    过去可以通过关闭剪裁将文本放置在绘图边缘 在 ggplot2 2 2 0 中 这在使用构面的图中似乎不再可能了 但如果不使用构面 仍然可以工作 我发布了一个问题here https github com tidyverse ggplot2
  • UWP 桌面桥和本地应用程序数据虚拟化文件夹位置

    我正在使用 将 Win32 应用程序 Zoom Player 转换为 UWP AppX 模型 桌面桥 转换工具 在 Windows VISTA 中引入的文件夹模型下 不需要创建 写入访问权限的应用程序文件安装在 程序文件 需要创建 写入访问
  • 如何在不使用临时文件的情况下将 .NET 对象序列化到 Azure Blob 存储中?

    我想将 NET 对象存储到 Azure Blob 存储中 目前我使用将其序列化为 XML 文件TextWriter episodeList是我想要序列化的对象 XmlAttributeOverrides overrides new XmlA
  • Java中如何从HashMap中获取键位置

    如何获取地图中的关键位置 如何查看 奥迪 和 宝马 在哪个位置 Map
  • ionic run android:构建失败并出现异常

    什么地方出了错 任务 CordovaLib processDebugResources 执行失败 com android ide common process ProcessException org gradle process inte
  • “#”的未定义方法“url”:字符串

    我使用Carrierwave上传图片 上传后 转到显示页面时出现错误 undefined method url for ActionDispatch Http UploadedFile 0x007f8b6134d610 gt String
  • 通过脚本级命令行参数激活Python的优化模式

    我有一个脚本可以加载各种模块来完成其工作 其中一些模块是heavily布满了断言语句 足以在实际使用中导致显着的速度减慢 我正在做很多涉及变异图的操作 因此有很多断言会迭代整个图 以强制不变量或检查结果的正确性 所以我想允许用户禁用这些检查
  • 方案 - 列表之和

    我正在尝试实现一个计算 list 的函数 其名称是sum define sum elemList if null elemList car elemList sum cdr elemList 0 上面的实现给出了错误的结果 例如 gt su
  • 如何删除 Docker 镜像?

    我有以下图像 alex alexvps sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  • ruby on Rails 中的 Facebook 重定向 url 打开 ssl 错误

    我已经按照 Ryan 在第 235 集中解释的那样关注了omniauth devise facebook 应用程序 在用户授权后 我们在以下位置收到错误http localhost 3000 auth facebook callback c
  • 创建像 Office 2010 一样的动画启动屏幕

    如何使用 C 创建像 Office 2010 中那样的动画启动屏幕 这个问题是关于winform还是wpf 如果是关于wpf的 动画启动屏幕只不过是加载 主窗口 时显示的 wpf 窗口 您可以按照 wischi 的说明使用 Expressi
  • jquery 移动和 flot 库

    我正在一个小型 jquery 移动框架站点中实现 flot 包含flot的页面 内容div位于辅助页面上 第一次显示浮动页面时 图表呈现得很好 返回到主页并再次前进到浮动页面时 图表不会呈现 内容来自 asp mvc 视图 div div
  • AS3 到 JS 编译器

    我偶然发现了 AS3 到 JS 编译器Jangaroo http www jangaroo net home 看起来它可能是一个有用的工具 因为它支持很多我喜欢的 AS3 功能 还有其他这样的编译器吗 我可以使用其他语言吗 学习一下 编译成
  • 您可以在 display:table-cell 中相对或绝对定位项目吗?

    我有一个链接 我希望它始终位于其所在单元格的右下角 现在该链接位于 元素中 我尝试同时进行绝对定位和相对定位 但可以获得我想要的效果 我有一排有 4 个单元格 当尝试应用绝对位置时 它将元素带到右侧的最后一个单元格 而不是仅仅将其放置在它所
  • matlab中无for循环的行列矩阵乘法

    我遇到以下问题 并且无法想出没有 for 循环的解决方法 考虑两个矩阵 a rand N 3 b rand 3 N 我想要得到的是 b i a i 一个 3 3 矩阵 在第三维中串联所有i 因此 对于上面的示例 结果应该是 3 3 N 矩阵
  • 如何在 Eloquent 中检查行是否被软删除?

    在 Laravel 5 1 中 有没有一种好方法来检查雄辩的模型对象是否已被软删除 我不是在谈论选择数据 而是一旦我有了对象 例如Thing withTrashed gt find id 到目前为止我能看到的唯一方法是 if thing g
  • 证书验证失败:无法获取本地颁发者证书

    我正在尝试使用 python 从网络获取数据 我为其导入了 urllib request 包 但在执行时出现错误 certificate verify failed unable to get local issuer certificat
  • 在共享 x 轴的子图上绘制时 x 刻度消失[重复]

    这个问题在这里已经有答案了 当我尝试在同一个子图上绘制一条线和一个区域时 会发生这种情况 我发现我的 x 刻度在我调用 ay ax twinx 并在 ay 上绘图后消失了 这是导致此错误的我的代码 fig axes plt subplots
  • 将react-hooks-testing-library与jest.spyOn一起使用 - 不调用间谍

    我在设置单元测试以确定是否使用正确的参数调用函数时遇到问题 useAHook返回函数foo它调用函数bar 代码看起来像这样 myModule js export const useAHook arg1 arg2 gt const foo