我正在尝试测试一种导入的静态方法,该方法应该在单击按钮时运行。这是应该在其上运行测试的组件:
const NextButton = (props: ISubmitButtonProps) => (
<button
onClick={Service.goToNext}
className="col-2 submit"
type="submit"
disabled={props.submitting}>
Next
</button>
);
export default NextButton;
现在,我想测试方法goToNext
是否正在实际运行。
为此,我使用了here中的示例,并添加了一个看起来不错的模拟,像这样:
const goToNextMock = jest.fn();
jest.mock('Services/service', () => ({
default: class {
public static goToNext() {
goToNextMock(); //the jest.fn from above
}
}
})
);
然后为它编写测试,只需模拟click事件,然后检查jest.fn()
是否已运行:
it('should call goToNext on button click', () => {
//button is set before as shallow(<NextButton submitting={false}/>);
button.simulate('click');
expect(goToNext).toHaveBeenCalled();
})
问题是,原因未知,测试无法持续。给我一个
预期已调用的模拟函数。
编辑:尝试以这种方式进行模拟时,会出现相同的结果(请注意其他preventDefault()
it('should call goToNextReport on button click', () => {
const mock = jest.fn();
Service.goToNext = mock.bind(Service);
button.simulate('click', { preventDefault() {} });
expect(mock).toHaveBeenCalled();
})
我对JEST和JS测试还很陌生。似乎模拟已正确完成,但仍然无法检查方法。
关于这个主题有什么想法吗? 所有帮助将是惊人的! 编辑:问题也已提交到JEST github频道:https://github.com/facebook/jest/issues/8695
答案 0 :(得分:1)
尝试一下:
jest.mock('Services/service', () => ({
goToNext: jest.fn()
}));