如何访问子组件状态和生命周期方法并在React中使用Jest + Enzyme进行验证?

时间:2018-03-26 08:49:49

标签: javascript reactjs unit-testing jestjs enzyme

需要enzyme的帮助才能进行测试。我在这里查了一下,但没有帮助:How does one access state on a nested React component wrapped by an HOC?

这是我的问题:

如何检查被调用的函数和子组件的状态?我还需要检查生命周期,所以我使用了父组件的mount,但尚未完成。 我在render编辑一个组件时使用了以下内容:

expect(searchWrapper.find('select [selected]').val()).to.equal('someId')

但是mount,这不起作用,因为它抱怨searchWrapper.find(...).val不是我认为是欢呼IO的功能,它只与render一起使用。那对我来说什么是正确的方式呢?

我打算做什么:在孩子选择更改时,检查(和/或匹配):

  1. 子func被调用一次
  2. 父func被调用一次(在里面调用。)
  3. 父州
  4. 儿童州
  5. 生命周期方法,如componentWillReceivePropscomponentDidMount
  6. 结果呈现输出验证,也包括上面的一些。
  7. 组件就像

    class ParentWrapper {
        // state and other functions and lifecycle methods
        render(){
            ....
            <SearchWrapper {...props}/>
            <ResultWrapper {...props}/>
        }
    }
    
    class SearchWrapper {
        // state
        // lifecycle methods
        // functions
    }
    

    ResultWrapper相同。

    使用一些代码再次总结一下: 我想访问Child节点的状态和其他对象,就像我们可以使用root一样。例如,还可以从选择菜单访问所选对象等渲染对象。

    // state is not a function, as it has to be called for root only, then whats the alternative
    expect(parentWrapper.find(SearchWrapper).state().searchId).to.equal('someValue');
    
    // Below also did not work, it worked when I tested SearchWrapper individually using render() 
    // which is a CheerIO function, but I need to use mount of parent for whole component testing 
    // and inter-component interactions
    
    searchWrapper.find('.form1 select').simulate('change', {target : {value : 'someValue'}});
    // sinon spy on change is triggered
    
    expect(searchWrapper.render().find('select [selected]').val()).to.equal('someValue');
    // AssertionError: expected undefined to equal 'someValue'
    

0 个答案:

没有答案