【问题标题】:onClick event with parameter being passed - Jest - React传递参数的 onClick 事件 - Jest - React
【发布时间】:2019-12-27 20:56:21
【问题描述】:

我正在为一小段代码编写测试用例。我有一个 Tab 组件,它有一个 onClick 事件。我正在通过 onClick 函数传递一个参数,但不知何故测试失败了。

{_.map(TABS_LIST, (item, index) => (
    <Tab
        key={_.uniqueId()}
        panelId={`tab-${index}`}
        id={`tab-${index}`}
        onClick={() => this.handleTabClick(index)}
        selected={this.state.selectedTabIndex === index}
    >
    {item}
    </Tab>
))}

handleTabClick(e) {
    this.setState({
        selectedTabIndex: e
    });
}

handleTabClick 已经在构造函数中绑定到 this。

这是测试用例

it('should onClick Tab', () => {

    wrapper.find('#tab-0').simulate('click', 0);


    expect(wrapper.instance().handleTabClick(0)).toHaveBeenCalledWith(0)
});

错误

错误:expect(received).toHaveBeenCalledWith(...expected)

匹配器错误:接收到的值必须是模拟或间谍函数

收到的值:未定义

请指教。

【问题讨论】:

    标签: reactjs unit-testing jestjs


    【解决方案1】:

    正如错误消息所说,toHaveBeenCalledWith 只能在 expect 调用中有模拟函数时使用。更多详情here.

    由于在您的场景中,您不是调用回调,而是设置状态,因此您可以在单击模拟后检查组件状态中selectedTabIndex 的值是否已设置为新索引。您也可以使用wrapper.state() 方法。

    【讨论】:

    • 我已经检查过了,它可以工作。但是有什么方法可以测试该函数是否已使用参数调用?
    • 你可以尝试模拟组件方法。如图here
    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 2017-07-24
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多