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