【发布时间】:2019-11-18 19:25:19
【问题描述】:
我正在尝试测试一个导入的静态方法,它应该在单击按钮时运行。这是应该运行测试的组件:
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
}
}
})
);
后来为它写了测试,简单的模拟点击事件,然后检查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
【问题讨论】:
标签: javascript typescript unit-testing jestjs enzyme