πλ¨μ ν μ€νΈ(Unit Test)
λ¨μ ν μ€νΈλ νλ‘κ·Έλλ° ν νλ‘κ·Έλ¨μ κΈ°λ³Έ λ¨μμΈ λͺ¨λμ΄ μλλλ‘ μ νν μλνλμ§ κ²μ¦νλ μ μ°¨μ΄λ€. μ¦, μμ€ μ½λμ κ°λ³ λ¨μλ₯Ό ν μ€νΈνμ¬ μ¬μ©ν μ€λΉκ° λμλμ§ νμΈνλ ν μ€νΈ λ°©λ²μ΄λ€.
βοΈλ¨μ ν μ€νΈλ₯Ό νλ μ΄μ
- μ€μ νκ²½μμ μ½λλ₯Ό μ€ννκΈ° μ΄λ €μ΄ κ²½μ° μ λ ν μ€νΈλ₯Ό ν΅ν΄ μ½λκ° μ μμ μΌλ‘ λμνλμ§ νμΈν μ μλ€.
- μ’ μμ±μ΄ μλ λ€λ₯Έ ν΄λμ€λ€μμ λ²κ·Έκ° λ°μνλ κ²μ λ°©μ§νκΈ° μν΄μμ΄λ€.
βοΈλ¨μ ν μ€νΈμ 쑰건
- ν μ€νΈ μ½λλ λΉ λ₯΄κ² λμνλ©° μμ£Ό λ릴 μ μμ΄μΌ νλ€.
- κ°κ°μ ν μ€νΈλ λ 립μ μ΄μ΄μΌ νλ©° μλ‘ μμ‘΄ν΄μλ μλλ€.
- μ΄λ νκ²½μμλ λ°λ³΅ κ°λ₯ν΄μΌ νλ€.
- ν μ€νΈλ μ±κ³΅ λλ μ€ν¨λ‘ bool κ°μΌλ‘ κ²°κ³Όλ₯Ό λ΄μ΄ μ체μ μΌλ‘ κ²μ¦λμ΄μΌ νλ€.
- ν μ€νΈλ μ μμ μ¦, ν μ€νΈνλ €λ μ€μ μ½λλ₯Ό ꡬννκΈ° μ§μ μ ꡬνν΄μΌ νλ€.
πJavascriptμμ λ¨μν μ€νΈνκΈ°: Jest
Jestλ νμ΄μ€λΆμμ λ§λ€μ΄μ Reactμ λλΆμ΄ λ§μ μλ°μ€ν¬λ¦½νΈ κ°λ°μλ€λ‘λΆν° μ¬λλ°κ³ μλ ν μ€ν λΌμ΄λΈλ¬λ¦¬μ΄λ€. μ΄λ² μ°ν μ½ ν리μ½μ€μ μ°Έμ¬νλ©΄μ μ²μ μ¬μ©ν΄λ³΄μλ€.
βοΈμ€μΉ
λ€μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ jestλ₯Ό μ€μΉνλ€.
npm install jest —save-dev
package.jsonμ λ€μκ³Ό κ°μ΄ μΆκ°(μμ )νλ€. μ΄ κ³Όμ μ ν΅ν΄ ν°λ―Έλμ npm testλ₯Ό μ λ ₯νλ©΄ jest 컀맨λλ₯Ό μ€νν μ μκ² λλ€.
scripts:{”test”: “jest —watch”}
βοΈJest κΈ°λ³Έλ¬Έλ²
// ν
μ€νΈν μ½λ
export const add = (x, y) => x + y;
// ν
μ€ν
μ½λ
describe("add", () => {
test("should add two numbers", () => {
expect(add(1, 1)).toBe(2);
expect(add(1, -4)).toBe(-3);
}
);
- describeλ μ¬λ¬ ν μ€ν μ½λλ₯Ό νλλ‘ λ¬Άμ λ μ¬μ©νλ€.
- testλ μ€μ λ‘ ν μ€ν μ μ€ννλ μ½λμ΄λ€.
- expectλ κ°μ ν μ€νΈν λλ§λ€ matcherμ ν¨κ» μ¬μ©νλ€.
- matcherλ λ΄κ° μνλ λ°©λ²μΌλ‘ κ°μ ν
μ€νΈνλλ‘ ν μ μλ€.
- toBe() : ν΄λΉ κ°κ³Ό μΌμΉνλ©΄ ν΅κ³Ό
- toBeNull() toBeUndefined() toBeDefined() : μΈ κ²½μ° ν΅κ³Ό
- toBeTruthy() toBeFasly() : boolean κ° νλ³
- toBeGreaterThan λ±… : μ΄μ, μ΄ν, μ΄κ³Ό, λ―Έλ§
- toMatch(/H/) : μ κ· ννμμΌλ‘ λ¬Έμμ΄ νλ¨
πκ°μ§κ°μ²΄(Mock Object)
μ΄λ, κ°κ°μ ν μ€νΈμ½λλ λ 립μ μ΄μ΄μΌ νλ©° μλ‘ μμ‘΄ν΄μλ μλλ€κ³ νλ€. λ°λΌμ λ€λ₯Έ κ°μ²΄μ μ£Όκ³ λ°λ κ²½μ°μ λ¬Έμ κ° λ°μνλ€. μ΄ κ²½μ° λ€λ₯Έ κ°μ²΄ λμ μ κ°μ§ κ°μ²΄(Mock Object)λ₯Ό μ£Όμ ν΄ νΉμ κ²°κ³Όλ₯Ό λ°ννλΌκ³ μ ν΄μ§ λ΅λ³μ μ€λΉμμΌμΌ νλ€.
⇒λνμ μΈ μμλ‘λ μ μΆλ ₯ν μ€νΈκ° μλ€.
describe("μ£Όλ¬Έ μ
λ ₯ ν
μ€νΈ",()=>{
test("μ£Όλ¬Έμ΄ νμμ λ§μ§ μμΌλ©΄ μμΈκ° λ°μνλ€.",()=>{
const mockReadLineAsync = jest.fn().mockResolvedValue("ν΄μ°λ¬Όνμ€ν,μ΄μ½μΌμ΄ν¬-3");
jest.spyOn(Console, "readLineAsync").mockImplementation(mockReadLineAsync);
expect(()=>InputView.getOrder()).rejects.toThrow(inputViewErrorMessage.ERROR_INPUT_ORDER_REGEX);
});
});
import { EOL as LINE_SEPARATOR } from 'os';
describe("OutputView ν
μ€νΈ",()=>{
test("μ£Όλ¬Έ λ©λ΄λ₯Ό μΆλ ₯νλ€.",()=>{
const spy = jest.spyOn(Console, "print");
const outputMessage = [`${}`+LINE_SEPARATOR+`${}`+LINE_SEPARATOR+`${}`];
outputView.printOrder();
outputMessage.forEach((log)=>{
expect([...spy.mock.calls).join(LINE_SEPARATOR)).toContain(log);
});
});
});