0

我试图嘲笑尖锐,我有这个:

// /__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.

我试过用替换const Sharp = jest.genMockFromModule('sharp')function Sharp (input, options) { return this }但这没有区别。

我究竟做错了什么..?

4

1 回答 1

1

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
}

似乎工作...

于 2017-09-21T12:28:42.700 回答