diff --git a/tips-git.md b/tips/git.md similarity index 100% rename from tips-git.md rename to tips/git.md diff --git a/tips-npm.md b/tips/npm.md similarity index 100% rename from tips-npm.md rename to tips/npm.md diff --git a/tips-terminal.md b/tips/terminal.md similarity index 100% rename from tips-terminal.md rename to tips/terminal.md diff --git a/tips/testing-library.md b/tips/testing-library.md new file mode 100644 index 0000000..9ace7c8 --- /dev/null +++ b/tips/testing-library.md @@ -0,0 +1,85 @@ +# testing-library + +자주 사용하는 방법 모음 + +## `rendere.create` + +TODO: 둘 중 어느방법을 쓰는게 좋을까? + +- `import renderer from 'react-test-renderer';` +- `import { render, screen } from '@testing-library/react';` + +```tsx +import renderer from 'react-test-renderer'; + +it('init', () => { + const calendar = renderer.create(); + expect(calendar).toMatchSnapshot(); +}); +``` + +## `getAllByRole` + +원하는 tag 를 찾을 수 있다. + +```tsx +import { render } from '@testing-library/react'; + +it('render startDate input when startDate is passed', () => { + render(); + + expect(screen.getAllByRole('textbox').length).toBe(1); +}); +``` + +## `data-testid` + +html 태그에 data-testid 를 넣어놓으면 빠르게 찾을 수 있다. +```tsx +import { render, screen } from '@testing-library/react'; + +it('render startDate, endDate input when startDate, endDate is passed', () => { + render(); + + expect(screen.getAllByRole('textbox').length).toBe(2); + expect(screen.getByTestId('startDate')).toBeTruthy(); + expect(screen.getByTestId('endDate')).toBeTruthy(); +}); +``` + +## `userEvent` + +- `@testing-library/react` 의 fireEvent 는 작동 안했지만 +- `@testing-library/user-event` 는 작동함 + +```tsx +it('show calendar when click', async () => { + render(); + expect(screen.getByTestId('startDate')).toBeTruthy(); + + userEvent.click(screen.getByTestId('startDate')); + + expect(screen.getByText(today.getDate())).toBeTruthy(); +}); +``` + +## `class` 찾기 + +- classList 에서 해당 클래스 존재하는지 찾을 수 있음 + +```tsx +it('disabled after when maxStartDate is passed', async () => { + const { debug } = render(); + expect(screen.getByTestId('startDate')).toBeTruthy(); + + userEvent.click(screen.getByTestId('startDate')); + + const tomorrow = moment(today).add(1, 'day').toDate(); + + expect(screen.getByText(today.getDate()).classList).toContain('active'); + expect(screen.getByText(tomorrow.getDate()).classList).toContain('disb'); +}); + +``` + + diff --git a/tips-webstorm.md b/tips/webstorm.md similarity index 100% rename from tips-webstorm.md rename to tips/webstorm.md