gpt4 book ai didi

javascript - 如何用 Jest 模拟第三方模块

转载 作者:数据小太阳 更新时间:2023-10-29 05:56:50 24 4
gpt4 key购买 nike

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

import sharp from 'sharp'

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

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

在我的测试中,我正在执行以下操作来模拟 sharp 函数:

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: () => ({...})
})
})

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

要测试调用的每个函数,您需要为每个函数创建一个 spy 。由于您不能在最初的模拟调用中做到这一点,因此您可以先用 spy 模拟它,然后再添加模拟:

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

关于javascript - 如何用 Jest 模拟第三方模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com