From 212a7ef2251558ce7638e37c515569f07d4f188e Mon Sep 17 00:00:00 2001 From: NickOvchinnikov Date: Thu, 23 Sep 2021 14:31:58 +0300 Subject: [PATCH] Add useState example --- .../ClickCounter.test.tsx | 28 +++++++++++++++++++ .../useStateAndUseEffect/ClickCounter.tsx | 17 +++++++++++ 2 files changed, 45 insertions(+) create mode 100644 examples/useStateAndUseEffect/ClickCounter.test.tsx create mode 100644 examples/useStateAndUseEffect/ClickCounter.tsx diff --git a/examples/useStateAndUseEffect/ClickCounter.test.tsx b/examples/useStateAndUseEffect/ClickCounter.test.tsx new file mode 100644 index 0000000..3d2654b --- /dev/null +++ b/examples/useStateAndUseEffect/ClickCounter.test.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; + +import { ClickCounter } from './ClickCounter'; + +describe('Test ClickCounter', () => { + it('should inc/dec counter when buttons inc/dec clicked', () => { + render(); + + const counter = screen.getByRole('heading'); + const increaseBtn = screen.getByRole('button', { name: 'Increase' }); + const decreaseBtn = screen.getByRole('button', { name: 'Decrease' }); + + expect(counter.textContent).toBe('Counter: 0'); + + fireEvent.click(increaseBtn); + expect(counter.textContent).toBe('Counter: 1'); + + fireEvent.click(increaseBtn); + expect(counter.textContent).toBe('Counter: 2'); + + fireEvent.click(decreaseBtn); + expect(counter.textContent).toBe('Counter: 1'); + + fireEvent.click(decreaseBtn); + expect(counter.textContent).toBe('Counter: 0'); + }); +}); diff --git a/examples/useStateAndUseEffect/ClickCounter.tsx b/examples/useStateAndUseEffect/ClickCounter.tsx new file mode 100644 index 0000000..b745df8 --- /dev/null +++ b/examples/useStateAndUseEffect/ClickCounter.tsx @@ -0,0 +1,17 @@ +import React, { FC, useState } from 'react'; + +interface Props { + defaultCount?: number; +} + +export const ClickCounter: FC = ({ defaultCount = 0 }) => { + const [count, setCount] = useState(defaultCount); + + return ( +
+

Counter: {count}

+ + +
+ ); +};