【问题标题】:Unit-testing React Components using Context Consumers使用上下文消费者对 React 组件进行单元测试
【发布时间】:2019-02-24 20:18:47
【问题描述】:

我曾经有这样的组件:

class Foo extends React.Component {
    render() {
        return (
            <div className="Foo">
                <div id="user">Bar</div>
                <SomeOtherComponent />
            </div>
        )
    }
}

还有这个测试:

it('renders a help button', () => {
  expect(shallow(<Foo />).find('#user').length).toEqual(1);
});

但是现在我已经为这个对象添加了一个上下文消费者:

class Foo extends React.Component {
    render() {
        return (
            <UserContext.Consumer>
                {({user}) => (
                    <div className="Foo">
                        <div id="user">{user}</div>
                        <SomeOtherComponent />
                    </div>
                )}
            </UserContext.Consumer>
        )
    }
}

如何测试以下条件?

  • “#user”的数量为1
  • 显示的用户是提供的用户

【问题讨论】:

    标签: reactjs unit-testing jestjs enzyme react-context


    【解决方案1】:

    您可以模拟UserContext.Consumer 以使用某个硬编码用户进行渲染。不确定如何导出 UserContext,但它看起来像这样:

    jest.mock('path/to/UserContextModule', () => ({
      UserContext: {
        Consumer: ({children}) => children({user: 'User'})
      }
    }))
    

    您的其余测试将保持不变。

    【讨论】:

    • 另外,如果它很浅,你可能需要.dive()
    • 不是我应得的英雄,而是我需要的英雄。
    猜你喜欢
    • 2019-09-02
    • 2019-05-06
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2016-03-22
    相关资源
    最近更新 更多