我正在尝试使用jest来模拟一个自定义函数,但是遇到了问题。
这是我的函数:
export const resizeImage = (file, fileName, callback) => {
const MAX_WIDTH = avatarImage.maxWidth;
const MAX_HEIGHT = avatarImage.maxHeight;
const img = document.createElement('img');
img.src = window.URL.createObjectURL(file);
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
img.onload = () => {
const sizes = internalResizeImage(img, MAX_WIDTH, MAX_HEIGHT);
canvas.width = sizes.width;
canvas.height = sizes.height;
ctx.drawImage(img, 0, 0, sizes.width, sizes.height);
return callback(dataURItoFile(canvas.toDataURL(), fileName));
};
};
我这样打电话:
resizeImage(acceptedFiles[0], this.props.user.id, (res) => {
//dostuff
});
在我的测试中,我是这样模拟它的:
let mockResizeImage = jest.fn();
jest.mock('../../utilities/imageUtils', () => ({
resizeImage: () => mockResizeImage
}));
我希望mockResizeImage成为一个回调函数,然后在我的测试中更改返回的值:
it('should call handleDrop and accept files', () => {
//mockResizeImage.mockReturnValue('something');
const instance = shallow(mockComponent()).instance();
const acceptFilesMock = ['test'];
instance.handleDrop(acceptFilesMock);
expect(clickSpy).toHaveBeenCalledTimes(1);
});
如果这是一个承诺就太好了,但它是一个回调函数,我不知道自己做错了什么。
谢谢。
resizeImage
”是什么意思?是指测试resizeImage
是否使用了正确的参数调用吗? - Andreas Köberleexpect(resizeImage).toHaveBeenCalledTimes(1);
- Albert Olivé Corbellaexpect(resizeImage.mock.calls[0][0]).toBe('firstParameter')
而不是调用回调函数的模拟,这样可以吗? - Robbie Cook