Testing Library
Testing์ด๋?
์ํํธ์จ์ด์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์
์ ํ์ด ์์ํ๋๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ๋จ๊ณ
์ ํ
์คํธ ์ฝ๋๋ฅผ ์ง์ผํ ๊น?
๋ณธ์ธ์ด ์์ฑํ ์ฝ๋์ ์์ ๊ฐ์ด ์๊ธด๋ค.
๊ธฐ๋ฅ์ด ์ ์ ๋์ํ๋์ง ํ์ธํ ์ ์๋ค.
์๊ตฌ์ฌํญ์ด ๋ง์กฑํ๋์ง ์ ๊ฒ ๊ฐ๋ฅ
์ด์์ ๋ํ ์์ธก์ด ๊ฐ๋ฅํด์ง๋ค.
๋ฒ๊ทธ๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌํ ์ ์๋ค.
์์ ๊ฐ์๊ฒ ๋ฆฌํฉํ ๋ง์ด ๊ฐ๋ฅํ๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ์ฝ๋๊ฐ ์์กด์ฑ์ ๋ฎ์ถ๊ณ ์ฝ๋์ ํ์ง์ ํฅ์์ํฌ ์ ์๋ค.
์ข์ ๋ฌธ์ํ ๋๊ตฌ๊ฐ ๋๋ค.
๊ฐ์ ์์ฝ
Jest
๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ ํ ์คํ ๋๊ตฌ.
Mocha์ Chai์ฒ๋ผ RSpec์ describe-it์ ์ง์ํ๊ณ , expect๋ก ๋จ์ธ(assertion)ํ ์ ์๋ค. Mocking๋ ๋ค์ํ ๋ ๋ฒจ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
BETTER SPECS โ RSpec ๋ฒ ์คํธ ํ๋ํฐ์ค ๋ชจ์
Let's RSpec โ ํต์ฌ ์์ด๋์ด ์ฐธ๊ณ ์ฉ
์ง์ํ๋ ๊ธฐ๋ฅ๊ณผ ํ์์ด ์์ ํ ๋์ผํ์ง ์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ง๋ง ํ ์คํธ ์ฝ๋๋ฅผ ์ด๋ค์์ผ๋ก ๊ตฌ์ฑ์ํด์ผ ํ ์ง ์ข์ ์๊ฐ ๋๋ ๋ง์ด ์ฐธ๊ณ ํ์!
Jest ๋ช
๋ น์ด
ํ
์คํธ ๊ตฌ์ฑ ๋จ๊ณ(Give-When-Then)
ํ ์คํธ ๊ตฌ์ฑ ํ ๋ Givn, When, Then ์ด 3๊ฐ์ง ๋จ๊ณ๋ก ๋๋๋ค
Given(Arrange): ํ ์คํธ๋ฅผ ์ํ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ ๋จ๊ณ
When(Act): ํ ์คํธ ํ๊ณ ์ ํ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๋จ๊ณ
Then(Assert): ์คํ๋ ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์์ํ๋ ๊ฐ์ผ๋ก ๊ฒ์ฆํ๋ ๋จ๊ณ
๊ฐ ๋จ๊ณ์์ ์ค์ ํฌ์ธํธ
Given
์ค๋น ๊ณผ์ ์ ์ฌ๋ฌ ํ ์คํธ์ ๊ฑธ์ณ์ ๋ฐ๋ณตํด์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ์ํด์ ์ฌ์ฉ
When
๋ด๊ฐ ์ฝ๋๋ฅผ ์คํํ์ ๋ ์๋์ ์ผ๋ก ์คํจํด๋ณธ๋ค. โ expect์ ๋ค๋ฅธ ๊ฐ์ ๋ฃ์ด๋ณธ๋ค.
์คํจ ํ์ ๋ ์คํจํ์ง ์๋๋ก ํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋์ง ํ์ธ
๋ฒ๊ทธ๋ฅผ ์์ ํ ๋๋ ์คํจํ๋ ํ ์คํธ๋ฅผ ๋จผ์ ๋ง๋ค์ด์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ๋จผ์ ๊ฒ์ฆํ๊ณ ๋ฒ๊ทธ๋ฅผ ์์ ํด์ ์ฑ๊ณตํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์ค์
์คํจํ์ง ์๋ ํ ์คํธ ์ฝ๋๋ ์์ผ๋ ๋ง๋ํ๋ค๋ ๊ฒ์ ๋ช ์ฌ!
๋ชจ๋ ํ ์คํธ ์ฝ๋๋ ์๋์ ์ผ๋ก ์คํจํ ์ ์์ด์ผ ํ๋ค.
Then
๊ฐ์ฅ ๋ง์ง๋ง์ ์์ฑ
๋ด๊ฐ ํ๋์ ํ ์คํธ ํจ์์์์ ๊ฒ์ฌํ๋๊ฒ ๋ง๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ ํ ์คํธ๋ก ๋ถ๋ฆฌํ ์ ์๋์ง ๊ณ ๋ฏผํด๋ณด์.
๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ์ฝ๋
BDD ์คํ์ผ์ ํ ์คํธ ์ฝ๋
ํํ๋ ฅ์ด ์ข์์ง๊ณ , ์ข ๋ ๊ณ ๋ฏผํ ๊ธฐํ๋ฅผ ์ ๊ณต.
describe โ ํ ์คํธ๋ฅผ ํ ๋์(์ฃผ์ด)๋ฅผ ๋ช ์
context โ ํ ์คํธ ๋์์ด ๋์ธ ์ํฉ
์์ด๋ก ์์ฑ์ ๋ฐ๋์
with
๋๋when
์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
it โ ํ ์คํธ ๋์์ ํ๋์ ์ค๋ช
it ๊ตฌ๋ฌธ์ ์ต๋ํ ์ฌํํ๊ฒ ์์ฑ
React Testing Library
UI์ ํนํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ฑฐ์ E2E ์ฒ๋ผ ์ธ ์ ์๋ค.
๋จ, โF/E ํ ์คํธ = only React ์ปดํฌ๋ํธ ํ ์คํธโ๊ฐ ๋๋ ์ํฉ์ ์ต๋ํ ํผํ๋ ๊ฒ ์ข๋ค.
๋ณธ์ง์ ์ง์คํ์ง ๋ชปํ๊ณ ๋๋ฌด ๋ง์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ํ์ด ์๋ค.
์ ์ง๋ณด์๋ฅผ ๋๊ธฐ ์ํด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ, ํ ์คํธ ์ฝ๋๋ฅผ ์๋ชป ์์ฑํ๋ฉด ์คํ๋ ค ์ ์ง๋ณด์๋ฅผ ์ ํดํ ์ ์๋ค.
๋ ๋ฒ ์ธ๋ฒ ๋ด์ผํ๋ ์์
๊ฐ๋จํ ํ ์คํธ ์ฝ๋
Jest Matcher
Jest๋ ๊ฐ์ ํ ์คํธํ ๋ ๋ค์ํ ๋งค์ฒํจ์๋ฅผ ์ ๊ณตํ๋ค.
matcher๋ '์ด๊ฑฐ ๋ง์?' ๋ผ๊ณ ๋ฌผ์ด๋ณด๋ ๋ฉ์๋๋ฆฌ๊ณ ๋ณด๋ฉด ๋๋ค.
๊ธฐ๋ํ ๊ฐ์ด ์ค์ ๋ฐํ๋ ๊ฐ๊ณผ ์ผ์นํ๋ ์ง๋ฅผ ํ์ธํ๋ ์์ ์ ์ผ์ปซ๋๋ค.
ํค์๋
Jest
์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ํ ์คํธํ ์ ์๋ ๋๊ตฌ
Test Runner & Assertion ํตํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Test Runner โ ํ ์คํธ๋ฅผ ์คํ ํ ๊ฒฐ๊ณผ ์์ฑ
Assertion โ ํ ์คํธ ์กฐ๊ฑด, ๋น๊ต๋ฅผ ํตํ ํ ์คํธ ๋ก์ง ๊ฒ์ฌ
Jest ํน์ง
Zero config: ๋ณต์กํ ์ค์ ์ด ํ์์๋ค.
Snapshot ์ ๊ณต: ์ด๋ ํ ์ค๋ธ์ ํธ ๋๋ ํ์ฌ์ ์ํ๋ฅผ ์บก์ณํ ์ ์๋ ๊ธฐ๋ฅ
Isolated: ๋ ๋ฆฝ์ ์ด๋ผ ํ ์คํธ ์ํ ์๋ ๋ฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ค.
Great API: ๋ค์ํ ํ ์คํธ api ์ ๊ณต
Describe-Context-It ํจํด
ํ ์คํธ์ฝ๋๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ์ด๋ค ํ๋ฆ์์ ํ ์คํธ ์ฝ๋๊ฐ ์คํ๋๋์ง ์๊ธฐ ์ฝ๊ฒ ์ค๋ช ํ ์ ์๋ค.
Describe-Context-It ํจํด์ ์ฅ์
ํ ์คํธ ์ฝ๋๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ์ค๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ฝ์ ๋ ์ค์ฝํ ๋ฒ์๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค.
"๋น ๋จ๋ฆฐ" ํ ์คํธ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ฝ๋ค
React Testing Library
Test Pyramide
๋จ์ ํ ์คํธ(Unit Test)
ํจ์, ๋ชจ๋, ํด๋์ค
๋ฑ ํ๋์ ๋์์ ๋จ์๋ฅผ ํ ์คํธ
์์ฑํ๊ธฐ๋ ์ฝ๊ณ , ์คํ, ์๋ํ๊ฐ ์ฝ๋ค.
ํตํฉ ํ ์คํธ(Integration Test)
๋ชจ๋๋ค, ํด๋์ค๋ค
์ฌ๋ฌ๊ฐ์ง์ ๋จ์๋ฅผ ๋ฌถ์์ ๋์ ๊ด๊ณ ์ํธ์์ฉ์ ํ ์คํธ
UI ํ ์คํธ(E2E ํ ์คํธ)
๋๊ณผ ๋(end-to-end)์ ํ ์คํธ
์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ์ ๋ ํ๋ก์ฐ๋ฅผ ํ ์คํธ
ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ (Test-Driven Development, TDD)
๊ฐ๋ฐ(์ฝ๋ ์์ฑ)์ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑ
TDD ์์
ํ ์คํธ ์ฝ๋ ์์ฑ
ํ ์คํธ ์ฝ๋ ์คํ (Fail)
์์ฑ๋ ํ ์คํธ๊ฐ ํต๊ณผํ ์ ์๋๋ก ๊ฐ๋จํ ์ํ ์ฝ๋ ์์ฑ
ํ ์คํธ ์ฝ๋ ์คํ (Success)
3,4๋ฒ ๋ฐ๋ณตํ๋ฉฐ ์ฝ๋ ์์ฑ
์ฝ๋ ๋ฆฌํฉํ ๋ง
TDD๋ฅผ ํ๋ ์ด์
์ด๋ค์์ผ๋ก ์ฝ๋๋ฅผ ์ค๊ณํ ๊ฒ์ธ์ง์ ํฐ ํ์ ์ก์ ์ ์๋ค.
๋ชจ๋ ์๊ตฌ์ฌํญ(๋ชฉํ)์ ๋ํด ์ ๊ฒํ๋ ์๊ฐ์ ๊ฐ์ ์ ์๋ค.
๋จ์ํ ๊ตฌํํ๋๊ฒ์ ๋์ด์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ ์ฅ์์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
์ธํฐํ์ด์ค ์์ฃผ์ ์ฝ๋ ์์ฑ
์์คํ ์ ๋ฐ์ ์ธ ์ค๊ณ ํฅ์
๊ฐ๋ฐ ์ง์ค๋ ฅ ํฅ์
์ธ์ TDD๋ฅผ ํด์ผํ๋?
TDD๋ฅผ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ , ์ฝ๋๋ฅผ ๋ค ์์ฑํ ๋ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ค์ํ์ง ์๋ค.
๋ค๋ง, ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ์์ฒญํ๊ธฐ ์ , ๋ฉ์ธ ๋ ํฌ์ ๋จธ์งํ๊ธฐ ์ , ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌ๋๊ธฐ ์ด์ ์ ๊ผญ ๊ทธ์ ํด๋นํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ํฌํจ์์ผ์ผ ํ๋ค.
์๊ตฌ์ฌํญ์ด ๋ช ํํ ๋
๋น์ฆ๋์ค ๋ก์ง์ธ ๊ฒฝ์ฐ
์ค๊ณ์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ ๋
TDD๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
UI(์ปดํฌ๋ํธ)๋ฅผ ์์ฑํ ๋
UI์ ํ์ํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ก ๋นผ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ UI์ฝ๋๋ TDD๋ฅผ ์์ฑํ์ง ์๋๋ค.
Last updated