当前位置: 首页 > 面试题库 >

如何用玩笑和酶模拟React组件方法

余善
2023-03-14
问题内容

我有一个React组件(为了演示该问题,对此进行了简化):

class MyComponent extends Component {
    handleNameInput = (value) => {
        this.searchDish(value);
    };

    searchDish = (value) => {
      //Do something
    }

    render() {
        return(<div></div>)
    }
}

现在,我要测试提供的值的handleNameInput()调用searchDish

为此,我想创建一个代替组件方法的笑话模拟函数。

到目前为止,这是我的测试用例:

it('handleNameInput', () => {
   let wrapper = shallow(<MyComponent/>);
   wrapper.searchDish = jest.fn();
   wrapper.instance().handleNameInput('BoB');
   expect(wrapper.searchDish).toBeCalledWith('BoB');
})

但是我在控制台中得到的只是SyntaxError

语法错误

>       at XMLHttpRequest.open
> (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:458:15)
>       at run_xhr (node_modules/browser-request/index.js:215:7)
>       at request (node_modules/browser-request/index.js:179:10)
>       at DishAdmin._this.searchDish
> (src/main/react/components/DishAdmin.js:155:68)
>       at DishAdmin._this.handleNameInput
> (src/main/react/components/DishAdmin.js:94:45)
>       at Object.<anonymous> (src/main/react/tests/DishAdmin.test.js:122:24)

所以我的问题是,如何正确地用酶模拟组分方法?


问题答案:

可以通过以下方式模拟该方法:

    it('handleNameInput', () => {
       let wrapper = shallow(<MyComponent/>);
       wrapper.instance().searchDish = jest.fn();
       wrapper.update();
       wrapper.instance().handleNameInput('BoB');
       expect(wrapper.instance().searchDish).toBeCalledWith('BoB');
    })

您还需要在被测组件的包装器上调用.update,以便正确注册模拟功能。

语法错误来自错误的分配(您需要将方法分配给实例)。我的其他问题来自.update()模拟方法后不调用。



 类似资料:
  • 问题内容: 我正在尝试测试是否调用componentWillMount,为此我的测试是 但是,即使调用componentWillMount方法,测试也不会通过。我在这里想念什么? 问题答案: 我不知道其他答案是否对您的问题有所帮助,但是您不需要测试componentWillMount。React应该已经为您完成了该测试。 与您的测试更相关的是测试您要在组件中使用该方法的功能或动作。 如果要进行一些

  • 问题内容: 我是开玩笑/酶的新手,正尝试模拟对返回Promise的aync函数的调用,该调用是在componentDidMount方法的react组件内进行的。 该测试正在尝试测试componentDidMount将Promise返回的数组设置为状态。 我遇到的问题是,在将数组添加到状态之前,测试已完成并通过。我正在尝试使用“完成”回调来使测试等待,直到承诺解决为止,但这似乎不起作用。 我尝试将E

  • 问题内容: 我想嘲笑localStorage方法以进行错误模拟。我在Utility.js中定义了localstorage getter和setter方法。我想嘲笑在调用时抛出错误。 开玩笑, 但是模拟永远不会被调用。我也尝试过 问题答案: 这与Andreas在答案中建议的一致,但是我能够使用Storage接口对其进行模拟。我做了这样的事情 开玩笑, 这次公关讨论也很有帮助。

  • 问题内容: Jest提供了一种模拟函数的方法,如其文档中所述 但是,这些模拟仅在直接在测试中调用函数时才起作用。 如果我有一个这样定义的React Component,该如何模拟呢? 我不知道如何制作它,所以组件调用了我的模拟实现,以便我可以测试它是否可以正确地呈现数据。 (这是一个简化的,人为的示例,目的是为了了解如何模拟在React组件内部调用的函数) 编辑:api.js文件,为清楚起见 问题

  • 问题内容: 我正在使用NumericInput,当我在设备上运行应用程序时,它可以正常工作。 但是,当我运行时,会遇到各种错误: 和 第一个问题 :那正常吗? 第二个问题 :如果是,我该如何嘲笑? 遵循本指南,看来我需要做: 但这是行不通的。我也尝试过: 没有成功。 o_0这是怎么回事? 干杯! 问题答案: 这是正式的笑话预处理器存在的问题。 这是我开玩笑的配置文件: 为了解决这个问题,这是我的新