私はこれをgithub projectといい、KeyPad.jsコンポーネントの簡単なテストを書こうとしています。スタイル付きコンポーネントを使ったJest themeProvider
私はこの問題について開かれた問題を見ており、解決策の1つとしてコンポーネントをpropとしてテーマを渡すことをお勧めします。この解決策は酵素では機能しない。
私の場合の問題は、子コンポーネントがThemeProviderを通じてテーマを受け取って、テーマのpropをallに追加する必要があるテスト作業を行うことができることです。
例:
const tree = renderer.create(
<KeyPad
theme={theme}
cancel={()=> true}
confirm={()=> true}
validation={()=> true}
keyValid={()=>true} />
).toJSON();
expect(tree).toMatchSnapshot();
キーパッドのrenderメソッドは、次のように変更するテーマで、私はこのソリューションのようではないを行うどこでも
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>
)
}
支えるだろう。誰もがこれで私を助けることができますか?
ありがとうございました
ThemeProviderではなくすべてのコンポーネントでコンテキストを使用することをお勧めしますか?私はStyledComponentとの結合がコンポーネントをもはや真実にしない理由を理解していません。スタイルはオーバーライドできます。 – Pietro
@Pietro私はあなたが持っている方法でそれを保つことを提案していません。もしあなたが ' 'を真の反応成分にしたいなら、それは最善の解決策です –