如何用笑话模拟回调函数

2023-12-25

我正在尝试用笑话来模拟自定义函数,但我遇到了问题。

这是我的功能:

export const resizeImage = (file, fileName, callback) => {
  const MAX_WIDTH = avatarImage.maxWidth;
  const MAX_HEIGHT = avatarImage.maxHeight;
  const img = document.createElement('img');
  img.src = window.URL.createObjectURL(file);
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');

  img.onload = () => {
    const sizes = internalResizeImage(img, MAX_WIDTH, MAX_HEIGHT);

    canvas.width = sizes.width;
    canvas.height = sizes.height;
    ctx.drawImage(img, 0, 0, sizes.width, sizes.height);
    return callback(dataURItoFile(canvas.toDataURL(), fileName));
  };
};

我这样调用:

resizeImage(acceptedFiles[0], this.props.user.id, (res) => {
  //dostuff
});

在我的测试中,我这样嘲笑它:

let mockResizeImage = jest.fn();

jest.mock('../../utilities/imageUtils', () => ({
  resizeImage: () => mockResizeImage
}));

我希望 mockResizeImage 成为回调,然后在我的测试中更改返回值:

it('should call handleDrop and accept files', () => {
    //mockResizeImage.mockReturnValue('something');

    const instance = shallow(mockComponent()).instance();
    const acceptFilesMock = ['test'];

    instance.handleDrop(acceptFilesMock);

    expect(clickSpy).toHaveBeenCalledTimes(1);
  });

如果这是一个承诺,那一切都很好,但这是一个回调,我不知道我做错了什么。

Thanks.


您可以使用一个函数来模拟一个模块,该函数接受与原始函数相同的参数,并立即调用回调:

jest.mock('../../utilities/imageUtils', () => ({
  resizeImage: (file, fileName, callback) => callback('someData')
}));

顺便提一句。由于以下方式,您在问题中模拟模块的方式无法工作jest.mock作品。即使你写在let语句,当编译测试时它将被提升到文件的顶部。因此,用间谍模拟该函数的最佳方法如下所示:

import {resizeImage} from '../../utilities/imageUtils'

jest.mock('../../utilities/imageUtils', () => ({
  resizeImage: jest.fn((file, fileName, callback) => callback('someData'))
}));

现在您的行为与上面相同,但您也可以测试一下resizeImage使用正确的参数调用。

由于您的最后一个参数是一个函数,因此您可以使用以下方法测试前两个参数mock.calls http://facebook.github.io/jest/docs/mock-function-api.html#mockfnmockcalls:

expect(resizeImage.mock.calls[0][0]).toBe('firstParameter')
expect(resizeImage.mock.calls[0][1]).toBe('secondParameter')

或者使用时对最后一个参数使用通配符toBeCalledWith using expect.anything() http://facebook.github.io/jest/docs/expect.html#expectanything:

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

如何用笑话模拟回调函数 的相关文章

随机推荐

  • 在 PowerShell 中获取伟大的祖父文件夹路径(向上三级)?

    有没有一种优雅的方法可以从文件夹路径获取 曾祖父母文件夹 三层 我只是想得到C folderA folderB从完整的路径来看 但这两种解决方案对我来说都显得丑陋 path C folderA folderB folderC FolderD
  • Android Studio Bumblebee 频繁崩溃

    我想知道是否有其他人遇到过这个问题并找到了解决方法 Android Studio Bumblebee 随机且频繁地崩溃 没有模式 当我做某事 例如 编辑代码 或有时什么都不做时 它会崩溃 当我启动 AS 或使用它一段时间后 它可能会崩溃 它
  • 检查多维输入数组中的值

    我将值存储在多维隐藏输入数组中 如下所示
  • 为什么 git rebase 的合并冲突通常比合并少?

    我经常听到有人说 与 git merge 相比 使用 git rebase 可以减少合并冲突的数量 但我从未找到解释为什么会出现这种情况 当两个人都修改同一行代码时 简单地在另一组更改之上重放一组更改并不能神奇地消除固有冲突 那么是什么让
  • Perl:全局符号需要显式包名称

    因此 我一直在尝试找到解决方案 但到目前为止 我在网上阅读的所有内容都与范围问题有关 而不是用my关键词 然而 我似乎无法解决这些问题 因为我已经在顶部声明了所有内容 并且至少对我来说 似乎我没有范围问题 我的以下代码的错误是 Global
  • Cloudera Manager 有其他选择吗? (CDH)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 正如Cloudera官方博客所说 从6 3 3开始就没有免费版本的CDH 他们会让Cloudera M
  • .net框架中内置的抽象类都有哪些? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我一直在寻找但无法找到合适的列表 有
  • 寻找一种良好的空间划分数据结构,以快速生成数百万个原子键

    我正在执行一些涉及数百万个原子的系统的 MD 模拟 我编写了一些代码来生成一个文件 该文件只是 XYZ 原子坐标的列表 现在我需要在原子之间生成键 如果两个原子彼此之间的距离在一定距离内 则被视为键 XYZ 文件示例 1 0 0 2 0 0
  • Java 中的 HTTPResponse 作为 JSON

    我试图从 HTTP 响应中获取 JSONObject try GetMethod postMethod new GetMethod postMethod setURI new URI url true postMethod setReque
  • 在菜单按钮之前和之间留出等宽的间隙

    我使用下面的代码创建了一个滚动菜单 我试图在每个菜单精灵按钮之间创建相等的行间隙 宽度间距 目前 我已经能够在左右两端留出等宽间距 但不能在精灵按钮之间留出等宽间距 请参阅下面的相关代码 class LevelScene SKScene l
  • 向函数传递/返回数组(而不是指针)引用的一般规则?

    我们可以将数组的引用传递给函数 例如 void f int a 5 int x 5 f x okay int y 6 f y error type of y is not int 5 或者更好的是 我们可以编写一个函数模板 template
  • 自定义字体在使用 WKHTMLTOPDF 库生成的 PDF 中不起作用

    我正在使用 Laravel 5 1 SnappyPDF 包装器 它使用WKHTMLTOPDF图书馆 我正在尝试为我的 PDF 文件包含一些自定义谷歌字体 但这些字体在生成的 PDF 文件中不起作用 我尝试过 将字体转换为Base64还尝试通
  • 从Java中的国家/地区代码获取默认语言

    我需要根据国家 地区代码查找语言 对于国家代码 US 应返回 en 或 CN 应返回 zh 我经历了java util Locale 它适用于语言代码而不是国家代码 还 Locale getAvailableLocales在这里没有帮助 因
  • Scala Play Websocket - 使用一个演员发送:数组[字节]和字符串消息

    我有 Play websockets 操作 def socket WebSocket acceptWithActor String Array Byte request gt out gt Props new WebSocketInActo
  • 当 WCF 服务运行批处理文件时,XCopy 或 MOVE 不起作用。为什么?

    我遇到过这样的情况 同一个批处理文件的工作方式与命令行不同 并且是从 IIS 上托管的 WCF 服务触发的 区别在于 XCOPY 命令 当我正常运行批处理文件时 XCOPY 会移动我需要的所有数据 XCOPY C from C to K R
  • UITextView 中光标的奇怪位置

    我从头开始写作成长UITextView in my swift应用程序 我放了一个textView on the view像这样 它位于键盘的正上方 The textView有附加的约束view leading bottom top and
  • 将 Web api blob 读入字符串,我可以将其作为 json 对象的一部分发送到服务器并返回到文件

    我正在尝试将 wav 文件转换为字符串 我可以将其作为 json 对象的一部分发送到服务器 以便在服务器上我可以将该字符串转换回文件 我尝试使用 readAsBinaryString 并读取为文本 但在将字符串读入字节数组时无法解决错误 r
  • Android 遵从相机

    有没有办法从我自己的应用程序中打开默认相机应用程序并使用that获取图片 视频 我一直试图查找它 但我只找到了有关自己克隆相机应用程序的说明 通常带有非常糟糕的说明 我知道 iPhone 可以做到这一点 如果 Android 无法做到这一点
  • 触摸时更改表格单元格的 UIImage

    我在下面有这个设置 但是当我触摸表格单元格时 我收到警报 所以我知道正在调用该方法 但单元格左侧的图像没有改变 这就是我的代码的样子 在视图控制器中我有这两种方法 UITableViewCell tableView UITableView
  • 如何用笑话模拟回调函数

    我正在尝试用笑话来模拟自定义函数 但我遇到了问题 这是我的功能 export const resizeImage file fileName callback gt const MAX WIDTH avatarImage maxWidth