酵素でクラスコンポーネントをテストすると、wrapper.setState({})
を実行して状態を設定できます。 useState()
フックを使用して関数コンポーネントをテストしているときに、どうすれば同じことができますか?
たとえば、私のコンポーネントでは:
const [mode, setMode] = useState("my value");
そして、テスト内でmode
を変更したい
フックから状態を使用する場合、適切にテストするには、状態などの実装の詳細をテストで無視する必要があります。それでも、コンポーネントが正しい状態をその子に渡すことを確認できます。
この素晴らしい例は、Kent C. Doddsによって作成された ブログ投稿 にあります。
以下は、コード例を示した抜粋です。
状態の実装の詳細に依存するテスト-
test('setOpenIndex sets the open index state properly', () => {
const wrapper = mount(<Accordion items={[]} />)
expect(wrapper.state('openIndex')).toBe(0)
wrapper.instance().setOpenIndex(1)
expect(wrapper.state('openIndex')).toBe(1)
})
状態の実装の詳細に依存しないテスト-
test('counter increments the count', () => {
const {container} = render(<Counter />)
const button = container.firstChild
expect(button.textContent).toBe('0')
fireEvent.click(button)
expect(button.textContent).toBe('1')
})