Jest mocking - 我如何模拟这个模块..?
Jest mocking - How do I mock this module..?
我正在尝试模拟 sharp 我有这个:
// /__mocks__/sharp.js
const Sharp = jest.genMockFromModule('sharp')
Sharp.prototype.jpeg = function (options) { return this }
Sharp.prototype.trim = function (options) { return this }
Sharp.prototype.normalise = function (bln) { return this }
Sharp.prototype.background = function (colour) { return this }
Sharp.prototype.embed = function () { return this }
Sharp.prototype.clone = function () { return this }
Sharp.prototype.resize = function (width, height) { return this }
Sharp.prototype.toBuffer = function () {
return Buffer.from('')
}
export default Sharp
当我 import sharp from 'sharp'
和 console.log(sharp)
我得到:
function Sharp() {return mockConstructor.apply(this,arguments);}
看起来不错,它找到了我的模拟模块,而不是真正的模块。
你这样使用sharp
:
const sharpImage = sharp(input, options).jpeg(options).trim()
const myImageBuff = await sharpImage.toBuffer()
但是,当我从测试代码调用 sharp()
时,使用我的模拟模块,它的值是 undefined
,而不是 instanceof sharp
.
我试过用 function Sharp (input, options) { return this }
替换 const Sharp = jest.genMockFromModule('sharp')
但这没什么区别。
我做错了什么..?
在 sharp
构造函数中找到它。
https://github.com/lovell/sharp/blob/35117239144dcd085ecf653697df725b2f2e8fbb/lib/constructor.js#L97
所以我将 const Sharp = jest.genMockFromModule('sharp')
换成了:
function Sharp (input, options) {
if (!(this instanceof Sharp)) {
return new Sharp(input, options)
}
return this
}
似乎有效...
我正在尝试模拟 sharp 我有这个:
// /__mocks__/sharp.js
const Sharp = jest.genMockFromModule('sharp')
Sharp.prototype.jpeg = function (options) { return this }
Sharp.prototype.trim = function (options) { return this }
Sharp.prototype.normalise = function (bln) { return this }
Sharp.prototype.background = function (colour) { return this }
Sharp.prototype.embed = function () { return this }
Sharp.prototype.clone = function () { return this }
Sharp.prototype.resize = function (width, height) { return this }
Sharp.prototype.toBuffer = function () {
return Buffer.from('')
}
export default Sharp
当我 import sharp from 'sharp'
和 console.log(sharp)
我得到:
function Sharp() {return mockConstructor.apply(this,arguments);}
看起来不错,它找到了我的模拟模块,而不是真正的模块。
你这样使用sharp
:
const sharpImage = sharp(input, options).jpeg(options).trim()
const myImageBuff = await sharpImage.toBuffer()
但是,当我从测试代码调用 sharp()
时,使用我的模拟模块,它的值是 undefined
,而不是 instanceof sharp
.
我试过用 function Sharp (input, options) { return this }
替换 const Sharp = jest.genMockFromModule('sharp')
但这没什么区别。
我做错了什么..?
在 sharp
构造函数中找到它。
https://github.com/lovell/sharp/blob/35117239144dcd085ecf653697df725b2f2e8fbb/lib/constructor.js#L97
所以我将 const Sharp = jest.genMockFromModule('sharp')
换成了:
function Sharp (input, options) {
if (!(this instanceof Sharp)) {
return new Sharp(input, options)
}
return this
}
似乎有效...