【问题标题】:Enzyme/Jest static method mock not runningEnzyme/Jest 静态方法模拟未运行
【发布时间】: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


    【解决方案1】:

    试试这个:

    jest.mock('Services/service', () => ({
        goToNext: jest.fn()
    }));
    

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 1970-01-01
      • 2020-06-21
      • 2018-09-03
      • 2020-11-05
      • 1970-01-01
      • 2019-08-28
      • 2019-01-29
      • 2020-07-16
      相关资源
      最近更新 更多