如何在Jest中模拟Promise resolve函数

时间:2020-04-02 10:46:07

标签: javascript unit-testing jestjs enzyme

我正在使用Jest + Enzyme。 我有一个功能

     submitHandler = values => {
         return new Promise((resolve, _) => {
                saveSomething({values, resolve});
         }
     }

我的测试:

    it('Should call saveSomething on form submit', () => {
        const values = {firstName: 'FName', lastname: 'LName'};
        const {enzymeWrapper, props} = setup();
        enzymeWrapper.find('Formik').simulate('submit', values);
        expect(props.saveSomething).toBeCalledWith({
            values: {
                ...values,
                contactLanguage: LOCALE_TO_LANGUAGE_MAP[props.locale],
            },
        });
    });

当前,我的测试失败。 错误:

    Error: expect(jest.fn()).toBeCalledWith(...expected)

    - Expected
    + Received

    @@ -1,6 +1,7 @@
      Object {
    +   "resolve": [Function anonymous],
        "values": Object {
          "contactLanguage": "FRENCH",
          "firstName": "FName",
          "lastname": "LName",
        },,

问题:如何模拟解析功能?

1 个答案:

答案 0 :(得分:0)

开玩笑的嘲笑有一种固有的方法来应对Promise的决议和拒绝。有关详细信息,请参阅Jest Mock API

mockResolvedValue方法用于此目的。

只需通过简单调用jest.fn()来模拟您的SubmitHandler并添加mockResolvedValue方法即可。

您也可以使用mockRejectValue方法测试拒绝。