gpt4 book ai didi

javascript - 使用样式化组件 themeProvider 开 Jest

转载 作者:数据小太阳 更新时间:2023-10-29 04:21:09 25 4
gpt4 key购买 nike

我指的是这个 github project我正在尝试编写 KeyPad.js 的简单测试组件。

我已经看到关于这个问题的问题,一个建议的解决方案是将主题作为 prop 传递给组件。该溶液不适用于 enzyme 。

在我的案例中,问题是子组件通过 ThemeProvider 接收主题,并且为了能够进行测试,我需要向所有组件添加主题 Prop 。

例子:

const tree = renderer.create(
<KeyPad
theme={theme}
cancel={()=> true}
confirm={()=> true}
validation={()=> true}
keyValid={()=>true} />
).toJSON();
expect(tree).toMatchSnapshot();

KeyPad 的 render 方法会像这样改变,到处都是主题 Prop

render() {
let { displayRule, validation, label, confirm, cancel, theme, keyValid, dateFormat } = this.props
return (
<Container theme={theme}>
<Content theme={theme}>
<Header theme={theme}>
<CancelButton theme={theme} onClick={cancel}>
<MdCancel />
</CancelButton>
<Label>{label}</Label>
<ConfirmButton theme={theme} onClick={() => confirm(this.state.input)} disabled={!validation(this.state.input)}>
<MdCheck />
</ConfirmButton>
</Header>
<Display
theme={theme}
value={this.state.input}
displayRule={displayRule}
dateFormat={dateFormat}
cancel={this.cancelLastInsert} />
<Keys>
{[7, 8, 9, 4, 5, 6, 1, 2, 3, '-', 0, '.'].map( key => (
<Button
theme={theme}
key={`button-${key}`}
theme={theme}
click={(key) => this.handleClick(key) }
value={key}
disabled={!keyValid(this.state.input, key, dateFormat)} />
))}
</Keys>
</Content>
</Container>
)
}

喜欢这个解决方案。有人可以帮我解决这个问题吗?

谢谢

最佳答案

我只想解构回调的 props 参数并为 theme 添加一个默认值。这样,您可能从 theme 访问的任何 prop 都不会抛出 Cannot read property ... of undefined 并返回 undefined。它会弄乱您的样式,但我认为您在单元测试中不会太在意它。

...
color: ${({ theme = {} }) => theme.background};
...

关于javascript - 使用样式化组件 themeProvider 开 Jest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47401401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com