如何测试单击事件是否调用了私有函数?

时间:2019-04-12 17:49:35

标签: reactjs typescript jestjs

我正在学习开玩笑,并且正在尝试测试点击事件。我要测试的功能在组件内部是私有的。

我尝试使用spyOn()方法。

这是调用函数的组件

id

这是功能

<NavbarToggler onClick={this.toggleNavbar} />

这是测试

    private toggleNavbar = (): void => {
        this.setState({
            isOpen: !this.state.isOpen
        });
    }

我目前在jest.spyOn上收到一条错误消息,说不能将toggleNavbar分配给参数

1 个答案:

答案 0 :(得分:1)

通常,您不需要这样做,因为您将测试组件的实现细节-这会使测试变得脆弱。如果您的私有方法设置了一个状态,则该状态很可能会更改组件渲染的输出。您应该断言,触发它后(例如通过单击),渲染函数的输出包含该更改。

假设您正在使用enzyme

    // expect(wrapper.find(Navbar)).not.toExist(); // enzyme-matchers provides `toExists()`
    wrapper.find(NavbarToggler).simulate('click');
    expect(wrapper.find(Navbar)).toExist(); // enzyme-matchers provides `toExists()`

要回答您的问题-如果您使用的是enzyme,则可以检查组件的状态。另一个超级肮脏的解决方案是instance.toggleNavbar = jest.fn(),尽管如前所述,您永远不需要这样做。