如何用Jest模拟第三方模块

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

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

以上是 如何用Jest模拟第三方模块 的全部内容, 来源链接: utcz.com/qa/432937.html

回到顶部