Mock
Mock κ°μ²΄λ₯Ό μ¬μ©νλ μ΄μ
ν μ€νΈλ μ€μ μ€ν νκ²½κ³Ό μ μ¬ν μλ‘ μ¬νμ±μ΄ λλ€.
νμ§λ§ μ¬νμ±μ λμ΄λ€λ³΄λ©΄ μ€ν μκ°μ΄ μ€λ 걸리거λ νκ²½ ꡬμΆμ΄ μ΄λ €μμ§λ κ²½μ°κ° μλ€.
λνμ μΌλ‘ μΉ API λ°μ΄ν°λ₯Ό λ€λ€μΌνλ κ²½μ° λ€νΈμν¬ μ€λ₯μκ°μ΄ μ μ΄ν μ μλ λΆλΆμμ μ€ν¨ν μ μμ
ν μ€νΈνλ λμμ μΉ API μμ²΄κ° μλ μλ΅ λ°μ΄ν°μ λν μ²λ¦¬λΌλκ²μ λͺ μ¬
μ€μ API μλ΅κ° λμ μ¬μ©νλ κ²μ΄ λͺ© κ°μ²΄μ΄λ€.
λͺ© κ°μ²΄λ₯Ό μ¬μ©νλ©΄ ν μ€νΈκ° μ΄λ €μ΄ λΆλΆμ ν μ€νΈλ₯Ό κ°λ₯νκ² νκ³ λμ± ν¨μ¨μ μΈ ν μ€νΈκ° κ°λ₯ν΄μ§λ€.
λͺ© κ°μ²΄ μ©μ΄
stub
,spy
λ±μ λͺ© κ°μ²΄λ₯Ό μν©μ λ°λΌ μΈλΆνν κ°μ²΄μ λͺ μΉκ°λ° μΈμ΄μ μκ΄μμ΄ ν μ€νΈ μλν κ΄λ ¨ λ¬Ένμμ μ μν μ©μ΄
Stub
μ€ν μ μ£Όλ‘ λμμΌλ‘ μ¬μ©νλ€. 1) μμ‘΄μ€μΈ μ»΄ν¬λνΈμ λμ 2) μ ν΄μ§ κ°μ λ°ννλ μ©λ 3) ν μ€νΈ λμμ ν λΉνλ μ λ ₯κ°
μ¦, ν μ€νΈ μ½λμμ μ€μ λ‘ μμ‘΄νλ λ°μ΄ν°λ κΈ°λ₯μ λ체νλ λλ―Έ λ°μ΄ν°λ₯Ό λ°ννλ μν
ν μ€νΈ λμμ΄ μμ‘΄μ€μΈ μ»΄ν¬λνΈμ ν μ€νΈνκΈ° μ΄λ €μ΄ λΆλΆμ΄ μμ λ
μΉ APIμ μμ‘΄μ€μΈ λμμ ν μ€νΈνλ κ²½μ°
"μΉ APIμμ μ΄λ° κ°μ λ°νλ°μμ λλ μ΄λ κ² μλν΄μΌ νλ€." μ κ°μ ν μ€νΈμ μ€ν μ μ¬μ©νλ€.
Spy
μ€νμ΄λ μ£Όλ‘ κΈ°λ‘νλ μ©λ
1) ν¨μλ λ©μλμ νΈμΆ κΈ°λ‘
2) νΈμΆλ νμλ μ€ν μ μ¬μ©ν μΈμ κΈ°λ‘
3) ν μ€νΈ λμμ μΆλ ₯ νμΈ
ν μ€νΈ λμ μΈλΆμ μΆλ ₯μ κ²μ¦ν λ μ¬μ©νλ€.
μΈμλ‘ λ°μ μ½λ°± ν¨μλ₯Ό κ²μ¦νλ κ²
μ½λ°±ν¨μκ° μ€νλ νμ
μ€ν μ μ¬μ©ν μΈμ
μλν λλ‘ μ½λ°±μ΄ νΈμΆλλμ§ κ²μ¦
Jestμ μ©μ΄ νΌλ
μ μ€νΈλ μ€ν , μ€νμ΄λ₯Ό ꡬνν λ
jest.mock
(λͺ© λͺ¨λ) νΉμjest.fn
,jest.spyOn
(λͺ© ν¨μ) λΌλ APIλ₯Ό μ¬μ©νλ€.μ μ€νΈλ μ΄λ₯Ό ꡬνν ν μ€νΈ λμμ λͺ© κ°μ²΄λΌκ³ λΆλ₯΄λ λ± xUnit ν μ€νΈ ν¨ν΄μμ μ μν μ©μ΄μλ λ€λ₯Έ λΆλΆμ΄ λ§μ
μ€ν νΉμ μ€νμ΄λ‘μ μ¬μ©νλ λͺ νν μ΄μ κ° μμ λλ₯Ό μ μΈνκ³ λ λͺ© κ°μ²΄λΌκ³ λΆλ₯΄μ.
Jestλ‘ λͺ© λͺ¨λμ νμ©νμ¬ μ€ν
ꡬννκΈ°
λ¨μ ν μ€νΈλ ν΅ν© ν μ€νΈλ₯Ό μμ±ν λ ꡬνμ΄ μμ±λμ΄ μμ§ μκ±°λ μμ μ΄ νμν λͺ¨λμ μμ‘΄μ€μΈ κ²½μ°κ° μλ€
μ΄λ λͺ© λͺ¨λλ‘ λ체νλ©΄ ν μ€νΈν μ μμλ λμμ ν μ€νΈ κ°λ₯νκ² νλ€.
λͺ¨λμ μ€ν
μΌλ‘ λ체νκΈ°
jest.mock
μ λ λ²μ§Έ μΈμμλ λ체ν ν¨μλ₯Ό ꡬνν μ μλ€.λͺ¨λμ μΌλΆλ₯Ό ν μ€νΈμμ λ체νλ©΄ μμ‘΄ μ€μΈ λͺ¨λμ ν μ€νΈκ° μ΄λ ΅λλΌλ ν μ€νΈκ° κ°λ₯νκ² λ§λ€ μ μλ€.
λͺ¨λ μΌλΆλ₯Ό μ€ν
μΌλ‘ λ체νκΈ°
jest.requireActual
ν¨μλ₯Ό μ¬μ©νλ©΄ μλ λͺ¨λμ ꡬνμimport
ν μ μλ€.
λΌμ΄λΈλ¬λ¦¬ λ체νκΈ°
μμ μ΄ νμν λͺ¨λμ μΌλΆλ₯Ό λ체νλ λ°©λ²
μ€λ¬΄μμλ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ체ν λ λͺ© λͺ¨λμ κ°μ₯ λ§μ΄ μ¬μ©νλ€.
μΉ API λͺ© κ°μ²΄ κΈ°μ΄
μΉ μ ν리μΌμ΄μ μμλ μΉ API μλ²μ ν΅μ νμ¬ λ°μ΄ν°λ₯Ό μ·¨λνκ³ κ°±μ νλ μμ μ νμ
ν μ€νΈν λλ μΉ API κ΄λ ¨ μ½λλ₯Ό μΉ API ν΄λΌμ΄μΈνΈμ λμμΈ μ€ν μΌλ‘ λ체νμ¬ ν μ€νΈλ₯Ό μμ±νλ€.
μ€ν μ΄ μ€μ μλ΅μ μλμ§λ§ μλ΅ μ νμ κ΄λ ¨ μ½λλ₯Ό κ²μ¦ν λ μ μ©νκ² μ¬μ© κ°λ₯νλ€.
μΉ API μλ²κ° μμΌλ©΄ APIλ₯Ό νΈμΆμ΄ ν¬ν¨λ λ‘μ§μ ν μ€νΈκ° λΆκ°λ₯νλ€.
ν΄λΉ API νΈμΆ λΆλΆμ μ€ν μΌλ‘ λ체νλ©΄ μ€μ μλ²μ μλ΅ μ¬λΆ μκ΄μμ΄ λ°μ΄ν° μ·¨λκ³Ό κ΄λ ¨λ λ‘μ§μ ν μ€νΈν μ μλ€.
μΉ APIλ₯Ό ν΄λΌμ΄μΈνΈ μ€ν
ꡬν
νμ μ€ν¬λ¦½νΈμ μμ±μ΄ μ’μ
jest.spyOn
μ μ¬μ©ν΄λ³΄μ.
λ°μ΄ν° μ·¨λ μ±κ³΅μ μ¬νν ν
μ€νΈ
λ°μ΄ν° μ·¨λμ΄ μ±κ³΅νμ λ(resolve) μλ΅μΌλ‘ κΈ°λνλ κ°μ²΄λ₯Ό
mockResolvedValueOnce
μ μ§μ μ¬κΈ°μ μ§μ ν κ°μ²΄λ νμ μμ€ν μ΄ μ μ©λ μνμ΄λ―λ‘ μ μ§λ³΄μ μμ
λ°μ΄ν° μ·¨λ μ€ν¨λ₯Ό μ¬νν ν
μ€νΈ
μ€λ₯ κ°μ²΄λ₯Ό
mockRejectedValueOnce
μΈμλ‘ getMyProfile ν¨μμreject
λ₯Ό μ¬ννλ μ€ν μ ꡬν
ν½μ€μ²
μλ΅μ μ¬ννκΈ° μν ν μ€νΈμ© λ°μ΄ν°λ₯Ό μλ―Έ
λͺ© κ°μ²΄ μμ± ν¨μ
ν μ€νΈμ νμν μ€μ μ μ΅λν μ μ λ§€κ°λ³μλ‘ κ΅μ²΄ν μ μκ² λ§λλ μ νΈλ¦¬ν° ν¨μ
ν μ€νΈν λλ§λ€
jest.spyOn
μ μμ±νμ§ μμλ λμ΄ μ½λκ° κΉλν΄μ§λ€.
λͺ© ν¨μλ₯Ό μ¬μ©νλ μ€νμ΄
μ μ€νΈμ λͺ© ν¨μλ‘ μ€νμ΄λ₯Ό ꡬννλ λ°©λ²
μ€νμ΄λ ν μ€νΈ λμμ λ°μν μ μΆλ ₯μ κΈ°λ‘νλ κ°μ²΄
μ€νμ΄μ κΈ°λ‘λ κ°μ κ²μ¦νμ¬ μλν λλ‘ κΈ°λ₯μ΄ μλνλμ§ ν μ€νΈν μ μμ
μ€νλλμ§ κ²μ¦νκΈ°
jest.fn
μ¬μ©ν΄μ λͺ© ν¨μλ₯Ό μμ±μμ±ν λͺ© ν¨μλ ν μ€νΈ μ½λμμ ν¨μλ‘ μ¬μ©νλ©°
tobeCalled
λ§€μ²λ₯Ό μ¬μ©νλ©΄ μ€ν μ¬λΆ κ²μ¦ κ°λ₯
μ€ν νμ κ²μ¦
λͺ© ν¨μλ μ€ν νμλ₯Ό κΈ°λ‘νλ€.
toHaveBeenCalledTimes
λ§€μ²λ₯Ό μ¬μ©νλ©΄ ν¨μκ° λͺ λ² νΈμΆλλμ§ κ²μ¦
μ€ν μ μΈμ κ²μ¦
λͺ© ν¨μλ μ€ν μ μΈμλ κΈ°λ‘
toHaveBeenCalledWith
λ§€μ²λ₯Ό μ¬μ©
λͺ© ν¨μλ λ€λ₯Έ ν¨μ μμ μμ±ν μλ μλ€.
μ€ν μ μΈμκ° κ°μ²΄μΌ λμ κ²μ¦
μΈμκ° λ¬Έμμ΄ κ°μ μμνμ΄ μλ λ°°μ΄μ΄λ κ°μ²΄μΌ λλ κ²μ¦μ΄ κ°λ₯νλ€.
expect.objectContaining
λΌλ 보쑰 ν¨μλ₯Ό μ¬μ©νλ©΄ κ°μ²΄μ μΌλΆλ§ κ²μ¦ν μ μλ€.κ°μ²΄κ° λ무 ν¬λ©΄ μΌλΆλ§ κ²μ¦ν μ λ°μ μλ€.
ν
μ€νΈ μ€λΉ
μ λ ₯ κ°μ λμ μΌλ‘ μμ±ν μ μλ ν©ν 리 ν¨μ
νμ¬ μκ°μ μμ‘΄νλ ν
μ€νΈ
νμ¬ μκ°μ μμ‘΄νλ λ‘μ§μ΄ ν μ€νΈ λμμ ν¬ν¨λλ€λ©΄ ν μ€νΈ κ²°κ³Όκ° μ€ν μκ°μ μμ‘΄νκ² λ¨
νΉμ μκ°λμλ CIμ ν μ€νΈ μλνκ° μ€ν¨νλ λΆμμ ν ν μ€νΈκ° λλ€.
μ΄λ ν μ€νΈ μ€ν νκ²½μ νμ¬ μκ°μ κ³ μ νλ©΄ νμ λμΌν ν μ€νΈ κ²°κ³Όλ₯Ό μ»μ μ μλ€.
νμ¬ μκ° κ³ μ νκΈ°
ν μ€νΈ μ€ν νκ²½μ νμ¬ μκ°μ μμμ μκ°μΌλ‘ κ³ μ νλ €λ©΄ λ€μκ³Ό κ°μ ν¨μ μ¬μ©
jest.useFakeTimers
: μ μ€νΈμ κ°μ§ νμ΄λ¨Έλ₯Ό μ¬μ©νλλ‘ μ§μjest.setSystemTime
: κ°μ§ νμ΄λ¨Έμμ μ¬μ©ν νμ¬ μκ°μ μ€μ jest.useRealTimers
: μ μ€νΈμ μ€μ νμ΄λ¨Έλ₯Ό μ¬μ©νλλ‘ μ§μνλ μμ λ³΅κ· ν¨μ
beforeEach
, afterEach
λ₯Ό μ¬μ©νμ¬ κ° ν
μ€νΈλ§λ€ μ¬μ μ€μ μ½λλ₯Ό μ κ±°ν μ μλ€.
ν
μ€νΈ μ€μ κ³Ό νκΈ°
ν μ€νΈλ₯Ό μ€ννκΈ° μ 곡ν΅μΌλ‘ μ€μ ν΄μΌ ν μμ μ΄ μκ±°λ ν μ€νΈ μ’ λ£ νμ 곡ν΅μΌλ‘ νκΈ°νκ³ μΆμ μμ μ΄ μλ κ²½μ°
μ€μ μμ μ
beforeAll
,beforeEach
λ₯ΌνκΈ° μμ μ
afterAll
,afterEach
λ₯Ό μ¬μ©
Last updated