zoomOut(callback) {
// Zooms out the current screen
this.view.current.zoomOut(300).done(() => {
(hasCallback(callback)) && callback();
});
}
我正在尝试测试上面的功能,但我不断收到以下错误:
TypeError:this.view.current.zoomOut(...)。done不是函数
如何在Jest中模拟此方法链?
答案 0 :(得分:2)
您可以尝试以下方法:
const mockZoomOut = jest.fn(() => ({ done(cb) { cb(); } }));
const mockThis = {
view: {
current: {
zoomOut: mockZoomOut,
},
},
};
test('it does', () => {
const cb = jest.fn();
zoomOut.apply(mockThis, [cb]);
expect(mockZoomOut).toHaveBeenCalledTimes(1);
expect(cb).toHaveBeenCalledTimes(1);
});
请参见Jest Mock Functions和fn.apply。
如果您要测试整个类的行为,则可以将要测试的实例设置为以某种方式使this.view.current.zoomOut
为mockZoomOut
。
答案 1 :(得分:2)
由于BudgieInWA,我能够通过返回done
来解决此问题。
对于那些正在使用酶测试React组件的人,您可以按照以下方法进行操作:
it('should call callback', () => {
const wrapper = shallow(<Zoom {...minProps}/>);
const instance = wrapper.instance();
const callback = jest.fn();
instance.view = {
current: {
zoomOut: jest.fn(() => {
return {
done: jest.fn((callback) => {
callback();
})
};
})
}
};
expect(callback).toHaveBeenCalledTimes(0);
instance.zoomOut(callback);
expect(callback).toHaveBeenCalledTimes(1);
});