我目前已在我的测试目标中导入:
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模块函数?
答案 0 :(得分:9)
你需要像这样嘲笑:
jest.mock('sharp', () => () => ({
raw: () => ({
toBuffer: () => ({...})
})
})
首先,您需要返回函数而不是对象,因为您调用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