首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击Handle on Jest

单击Handle on Jest
EN

Stack Overflow用户
提问于 2018-10-08 15:36:07
回答 1查看 841关注 0票数 2

我正在使用jest编写一个测试用例,但如果不是按钮,我无法获得如何测试点击模拟。如果是按钮,我们就写find(' button ),但是如果我们点击div,并且有嵌套的div,结果会怎样呢

代码语言:javascript
复制
class Section extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            open: props.open,
            className: 'accordion-content accordion-close',
            headingClassName: 'accordion-heading'
        };

        this.handleClick = this.handleClick.bind(this);
    }

    handleClick() {
        this.setState({
            open: !this.state.open
        });
    }

    render() {
        const { title, children } = this.props;
        const { open } = this.state;
        const sectionStateClassname = open
            ? styles.accordionSectionContentOpened
            : styles.accordionSectionContentClosed;

        return (
            <div className={styles.accordionSection}>
                <div
                    className={styles.accordionSectionHeading}
                    onClick={this.handleClick}
                    id="123"
                >
                    {title}
                </div>
                <div
                    className={`${
                        styles.accordionSectionContent
                    } ${sectionStateClassname}`}
                >
                    {children}
                </div>
            </div>
        );
    }
}

这是我的jest测试用例

代码语言:javascript
复制
 test('Section', () => {
        const handleClick = jest.fn();
        const wrapper = mount(<Section  onClick={ handleClick} title="show more"/>)
        wrapper.text('show more').simulate('click')
        expect(handleClick).toBeCalled()
    });
EN

回答 1

Stack Overflow用户

发布于 2018-10-08 17:00:02

你可以使用find element by class

代码语言:javascript
复制
wrapper.find('.' + styles.accordionSectionHeading).first().simulate('click')

此外,您的组件似乎没有调用prop handleClick。取而代之的是调用实例方法,如下所示:

代码语言:javascript
复制
wrapper.instance().handleClick = jest.fn();
expect(wrapper.instance().handleClick).toBeCalled();

看起来更正确。

或者,更好的做法是,您可以只检查状态是否已更改

代码语言:javascript
复制
expect(wrapper.state('open')).toBeTruthy();

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52697452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档