# Jest μκ°
μ μ€νΈ(Jest)λ νμ΄μ€λΆμμ λ§λ μλ°μ€ν¬λ¦½νΈ ν μ€ν λΌμ΄λΈλ¬λ¦¬μ λλ€. ν μ€νΈ μ½λμ λͺ¨μμ΄ μ§κ΄μ μ΄κ³ λ¬Έμνκ° μλμ΄ μμ΄ μμ¦ λ§μ΄ νμ©λκ³ μμ΅λλ€.
# λΌμ΄λΈλ¬λ¦¬ μ€μΉ
μ μ€νΈλ NPMμΌλ‘ μλμ κ°μ΄ μ€μΉν©λλ€.
npm install --save-dev jest
# ν μ€νΈ νμΌ μμ±
- νμΌ μμΉ : ν μ€νΈ ν νμΌμ΄ μλ ν΄λ λ΄
- ν΄λ μ΄λ¦ :
__test__
- νμΌ μ΄λ¦ :
νμΌ μ΄λ¦.test.js
λλνμΌ μ΄λ¦.spec.js
# ν μ€νΈ νμΌ κ²½λ‘ μ€μ
ν μ€νΈ νμΌμ μ΅λν ν μ€νΈ νλ €λ νμΌκ³Ό κ°κΉκ² μλ κ²μ΄ μ’μ΅λλ€. νλ‘μ νΈ μμ€ ν΄λ λ΄μ ν μ€νΈ νμΌμ λͺ¨λ λμμΌλ‘ ν μ€νΈλ₯Ό μ€ννλ €λ©΄ μ μ€νΈ μ€μ νμΌμ μλμ κ°μ μμ±μ μΆκ°ν©λλ€.
// jest.config.js
module.exports = {
testMatch: ['**/*.spec.[jt]s?(x)', '**/*.test.[jt]s?(x)'],
};
# ν μ€νΈ μ½λ μ€ν
μ μ€νΈλ₯Ό μ€μΉνκ³ λλ©΄ μ½μ μ°½μ μλμ κ°μ λͺ λ Ήμ΄λ‘ μ€νν μ μμ΅λλ€.
jest
μμ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νλ©΄ νλ‘μ νΈ λ΄λΆμ test.js
λλ spec.js
νμ₯μλ₯Ό κ°μ§λ νμΌμ λͺ¨λ μ€νν©λλ€.
TIP
NPM 컀μ€ν
λͺ
λ Ήμ΄λ npm t
λ‘ ν
μ€νΈλ₯Ό μ€νν μλ μμ΅λλ€.
# ν μ€νΈ μ½λ μμ
κ°λ¨ν ν μ€νΈ μ½λλ₯Ό μλμ κ°μ΄ μμ±ν΄λ΄€μ΅λλ€.
// helloworld.test.js
const str = 'Hello World';
test('HelloWorld Component', () => {
expect(str).toBe('Hello World');
});
μ μ½λλ str
μ κ°μ΄ Hello World
κ° λ§λμ§ νμΈνλ ν
μ€νΈ μ½λμ
λλ€.
μΌλ°μ μΌλ‘ ν
μ€νΈ μ½λμλ κΈ°λκ°κ³Ό κ²°κ³Όκ°μ΄ νμνλ° μ μ½λμ²λΌ expect()
μ κΈ°λκ°μ λ£κ³ ,
toBe()
μ μμ κ²°κ³Όκ°μ λ£μΌλ©΄ λ©λλ€.
μ΄μ μ½μμ jest
λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄ λ€μκ³Ό κ°μ ν
μ€νΈ κ²°κ³Όκ° λμ΅λλ€.
helloworld.test.js
νμΌμμ 1κ°μ ν
μ€νΈ μ½λλ₯Ό λλ €μ μ±κ³΅νλ€λ λ‘κ·Έμ
λλ€.
# Jest API
Jestλ‘ λ¨μ ν μ€νΈ μ½λλ₯Ό ꡬνν λ μμ£Ό μ¬μ©λλ API λͺ©λ‘μ λλ€.
- describe()
- test()
- expect()
- beforeEach()
# describe()
μ¬λ¬ κ°μ test()
μ½λλ₯Ό νλμ ν
μ€νΈ μμ
λ¨μλ‘ λ¬Άμ΄μ£Όλ API. νλμ ν
μ€νΈ μΌμ΄μ€λ₯Ό test()
λΌκ³ νλ€λ©΄ describe()
λ μ¬λ¬ κ°μ ν
μ€νΈ μΌμ΄μ€λ₯Ό νλμ κ·Έλ£ΉμΌλ‘ λ¬Άμ΄μ£Όλ μν .
describe('Testing 1', () => {
test('message equals to be Vue', () => {
// ..
});
test('data equals to be Object', () => {
// ..
});
});
# test()
ν
μ€νΈ μ½λλ₯Ό λ리기 μν API. νλμ ν
μ€νΈ μΌμ΄μ€λ₯Ό μλ―Ένλ©° it()
κ³Ό κ°μ μν .
test('message equals to be Vue', () => {
// ..
});
# expect()
ν
μ€νΈ ν λμμ λ£λ API. expect()
μλ μ£Όλ‘ ν
μ€νΈ μ
λ ₯ κ° λλ κΈ°λ κ°μ λ£μ΅λλ€.
var message = 'Vue';
test('message equals to be Vue', () => {
expect(message).toBe('Vue');
});
# toBe()
ν μ€νΈμ κ²°κ³Όλ₯Ό νμΈνλ API. ν μ€νΈμ μμ κ²°κ³Ό κ°μ λ£μ΅λλ€.
var message = 'Vue';
test('message equals to be Vue', () => {
expect(message).toBe('Vue');
});
TIP
ν
μ€νΈ κ²°κ³Ό κ° APIμλ toBe()
λΏλ§ μλλΌ toHaveBeenCalled()
, toBeTruthy()
, toBeFalsy()
λ± μ¬λ¬ μ νμ΄ μμ΅λλ€.
μμΈν 건 Jest - Expect API (opens new window)μμ νμΈν΄λ³΄μΈμ.
# beforeEach()
ν μ€νΈ νμΌμ κ° ν μ€νΈ μ½λκ° λκΈ° μ μ μνν λ‘μ§μ λ£λ API. ν μ€νΈ μΌμ΄μ€λ§λ€ λ°λ³΅λλ λ‘μ§μ λ£κΈ°μ μ ν©.
var message;
beforeEach(() => message = 'Vue');
test('message equals to be Vue', () => {
expect(message).toBe('Vue');
});
test('message equals to be Vue!!', () => {
expect(message + '!!').toBe('Vue');
});
# Jestμ λ·° μ»΄ν¬λνΈ ν μ€ν
μ§κΈκΉμ§ μ μ€νΈμ λν΄μ κ°λ³κ² μ΄ν΄λ΄€μΌλ μ΄λ²μ μ μ€νΈλ‘ λ·° μ»΄ν¬λνΈλ₯Ό ν μ€νΈν΄λ³΄κ² μ΅λλ€. μλλ μ μ€νΈλ‘ λ·° μ»΄ν¬λνΈλ₯Ό ν μ€νΈνλ μ½λμ λλ€.
<!-- HelloWorld.vue -->
<template>
<div> Hello {{ messsage }} </div>
</template>
<script>
export default {
data() {
return {
message: 'Vue!'
}
}
}
</script>
// helloworld.test.js
import HelloWorld from './HelloWorld.vue';
test('HelloWorld Component', () => {
expect(true).toBe(true);
});
μμ ν
μ€νΈ μ½λλ μ μ€νΈμμ HelloWorld μ»΄ν¬λνΈλ₯Ό μΈμν μ μλμ§ νμΈνλ μ½λμ
λλ€.
ν
μ€νΈμ κΈ°λ κ°κ³Ό κ²°κ³Ό κ°μ true
λ‘ μΌμΉνκΈ° λλ¬Έμ HelloWorld μ»΄ν¬λνΈλ§ μ λ€κ³ μ¨λ€λ©΄ μ€ν¨ μμ΄ ν
μ€νΈκ° μλ£λ©λλ€.
νμ§λ§, μ€μ λ‘ μ€νν΄λ³΄λ©΄ ν μ€νΈκ° μ€ν¨νλ©΄μ μλμ κ°μ κ²°κ³Όκ° λμ΅λλ€.
μ λ©μμ§λ 'λ·° μ»΄ν¬λνΈλ μ μ€νΈκ° ν΄μν μ μλ μ νμ νμΌμ΄ μλλ€' λΌλ μλ―Έμ λλ€. μκ°ν΄λ³΄λ©΄ μ±κΈ νμΌ μ»΄ν¬λνΈκ° μΉν©μ λ·° λ‘λ (opens new window)λ‘ ν΄μλμ΄μ μΉ μμμΌλ‘ μ΅μ’ λ³νλκΈ° λλ¬Έμ μ μ€νΈλ μ΄λ κ² λ³νν΄μ£Όλ λκ΅¬κ° νμν κ² κ°μ΅λλ€.
κ·ΈλΌ λ€μ μ±ν°μμ λ·° ν μ€ν μ λμμ£Όλ λκ΅¬μΈ Vue Test Utilsμ λν΄ μμλ³΄κ² μ΅λλ€.
β Overview Vue Test Utils β