当前位置: 首页 > 面试题库 >

如何用Jest模拟第三方模块

欧阳俊逸
2023-03-14
问题内容

我的测试目标中当前已导入:

import sharp from 'sharp'

并在我的相同测试目标中使用它:

return sharp(local_read_file)
    .raw()
    .toBuffer()
    .then(outputBuffer => {

在测试中,我正在做以下模拟尖锐函数的操作:

jest.mock('sharp', () => {
  raw: jest.fn()
  toBuffer: jest.fn()
  then: jest.fn()
})

但我得到:

  return (0, _sharp2.default)(local_read_file).
                             ^
TypeError: (0 , _sharp2.default) is not a function

有没有一种方法可以使用带有Jest的功能模拟所有Sharp模块功能?


问题答案:

您需要像这样模拟它:

jest.mock('sharp', () => () => ({
        raw: () => ({
            toBuffer: () => ({...})
        })
    })

首先,您需要返回function而不是对象,因为您需要调用sharp(local_read_file)。该函数调用将返回带有键的对象,该键raw包含另一个函数,依此类推。

要测试每个功能,您需要为每个功能创建一个间谍。由于您在最初的模拟调用中无法做到这一点,因此可以先使用间谍对其进行模拟,然后再添加模拟:

jest.mock('sharp', () => jest.fn())

import sharp from 'sharp' //this will import the mock

const then = jest.fn() //create mock `then` function
const toBuffer = jest.fn({()=> ({then})) //create mock for `toBuffer` function that will return the `then` function
const raw = jest.fn(()=> ({toBuffer}))//create mock for `raw` function that will return the `toBuffer` function
sharp.mockImplementation(()=> ({raw})) make `sharp` to return the `raw` function


 类似资料:
  • 问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知

  • 本文向大家介绍如何安装第三方模块?以及用过哪些第三方模块?相关面试题,主要包含被问及如何安装第三方模块?以及用过哪些第三方模块?时的应答技巧和注意事项,需要的朋友参考一下   用过的第三方模块:requests,pymysql,DbUtils,SQLAlchemy等  

  • 我试图为这样的函数编写一个单元测试: 为了测试这段代码,我需要模拟服务,因为它调用类外的函数,但问题是它是私有的。 我该如何用玩笑来模拟一个私有变量呢?这个类创建了它自己的实例,所以甚至可以模仿它吗?

  • 问题内容: 我正在使用ref为组件编写测试。我想模拟ref元素并更改一些属性,但不知道如何做。有什么建议? 问题答案: 根据https://github.com/airbnb/enzyme/issues/1937中的讨论,这就是解决方案 可以使用非箭头函数对类进行猴子修补,其中“ this”关键字将传递到正确的作用域。

  • 在前面,我们介绍了一个优秀的第三方库 — requests,本章再介绍两个第三方库: celery click 其中: celery 是一个强大的分布式任务队列,通常用于实现异步任务; click 是快速创建命令行的神器;

  • null 如上所示,它导出了一些命名函数,而且重要的是 使用了 。 开玩笑地说,当我为 编写单元测试时,我希望模拟 函数,因为我不希望 中的错误影响我为 编写的单元测试。我的问题是我不确定最好的方法是: 如有任何帮助/洞察力,我们将不胜感激。