Jest는 Matcher를 통해서 다양한 방식으로 값을 테스트할 수 있다. Matcher에 대한 내용은 Jest 공식 홈페이지 API를 참조하면 된다.
동등 비교
Matcher | 설명 |
toBe(값) | 기본 값을 비교하거나 객체 인스턴스의 참조 ID를 확인한다. |
toEqual(값) | 객체 인스턴스의 모든 속성을 비교한다. 즉 객체의 주소값이 아닌 깊은 값을 전부 비교한다. |
toStrictEqual(값) | .toEqual과 비슷하지만, .toStrictEqual의 경우 객체의 키 값이나 배열의 값이 undefined일 경우에도 비교를 하며 해당 데이터의 타입도 비교한다. |
// fn.js
const fn = {
funcA: (a) => a + 10,
funcB: (a, b) => ([a, b, undefined]),
funcC: (a, b, c) => ({a, b, c:undefined})
}
module.exports = fn;
//fn.test.js
const fn = require("../fn");
describe("동등함수 예제", () => {
test("funcA에 2를 넣으면 결과값은 12이다.", () => {
expect(fn.funcA(2)).toBe(12);
});
test("funcB에 1, 5를 넣으면 [1, 5]가 나온다.", () => {
expect(fn.funcB(1,5)).toEqual([1,5]);
});
test("funcC에 '안녕', '반가워'를 넣으면 {a:'안녕', b:'반가워'}가 나온다.", () => {
expect(fn.funcC('안녕', '반가워')).toEqual({a:'안녕', b:'반가워'});
});
test("funcC에 '안녕', '반가워'를 넣으면 {a:'안녕', b:'반가워'}가 나온다.", () => {
expect(fn.funcC('안녕', '반가워')).toStrictEqual({a:'안녕', b:'반가워'});
});
})
예제에서 보다시피 toEqual에선 passed였지만, toStrictEqual의 경우 "c: undefined" 값이 없어 failed가 된 것을 볼 수 있다.
true / false / null / undefined 확인
Matcher | 설명 |
toBeTruthy() | True 혹은 True에 준하는 값이 아닐 경우 에러 |
toBeFalsy() | False 혹은 False에 준하는 값이 아닐 경우 에러 |
toBeNull() | Null 값이 아닐 경우 에러 |
toBeUndefined(() | Undefined가 아닐 경우 에러 |
toBeDefined() | Undefined의 반대가 아닐 경우 에러 |
* false에 준하는 값 : undefined, null, 0, -0, NaN, '', "" (값이 없을 때 false라고 인식한다. )
// fn.js
const fn = (value) => {
switch (value) {
case "true":
return true;
case "false":
return false;
case "null":
return null;
case "undefined":
return undefined;
}
}
module.exports = fn;
//fn.test.js
const fn = require("../fn");
describe("true / false / null / undefined 확인 예제", () => {
test("value가 true면 true다.", () => {
expect(fn("true")).toBeTruthy();
});
test("value가 false면 false다.", () => {
expect(fn("false")).toBeFalsy();
});
test("value가 null이면 null이다.", () => {
expect(fn("null")).toBeNull();
});
test("value가 undefined이면 undefined이다.", () => {
expect(fn("undefined")).toBeUndefined();
});
test("value가 undefined이면 defined가 아니다.", () => {
expect(fn("undefined")).not.toBeDefined();
});
})
숫자 확인
Matcher | 설명 |
toBeGreaterThan() | 해당 숫자보다 크면 매치 |
toBeGreaterThanOrEqual() | 해당 숫자보다 크거나 같으면 매치 |
toBeLessThan() | 해당 숫자보다 작으면 매치 |
toBeLessThanOrEqual() | 해당 숫자보다 작거나 같으면 매치 |
toBeCloseTo() | 해당 숫자에 근접하면 매치 |
describe("숫자 확인 예제", () => {
test("2+2는 2보다 크다.", () => {
expect(2+2).toBeGreaterThan(2);
});
test("5는 5보다 크거나 같다.", () => {
expect(5).toBeGreaterThanOrEqual(5);
});
test("3는 8보다 작다.", () => {
expect(3).toBeLessThan(8);
});
test("5는 5보다 작거나 같다.", () => {
expect(5).toBeLessThanOrEqual(5);
});
// JavaScript에서 실제로 0.2+0.1 은 0.30000000000000004이기 때문에 테스트에서 failed한다.
test("0.2+0.1은 0.3이다.", () => {
expect(0.2+0.1).toBe(0.3);
});
//소수점 세자리까지 일치하면 근접하다고 본다.
test("0.2+0.1은 0.3에 근접하다.", () => {
expect(0.2+0.1).toBeCloseTo(0.3, 3);
});
})
문자열 확인
문자열의 경우에는 toMatch와 정규표현식을 사용하여 테스트 할 수 있다.
describe("문자열 확인 예제", () => {
const text = "내가 좋아하는 과일은 사과다.";
test("텍스트에 사과가 포함된다.", () => {
expect(text).toMatch(/사과/);
expect(text).toMatch(new RegExp("사과"));
});
})
배열 확인
배열의 경우 toContain을 통해 해당 요소가 포함되어있는지 아닌지를 테스트 할 수 있다.
describe("배열 확인 예제", () => {
const arr = ["apple", "banana", "grapefruit", "grape"];
test("배열에 grape가 있다", () => {
expect(arr).toContain("grape");
});
// 배열의 인덱스를 통해 해당 인덱스의 요소를 테스트할 수 있다.
test("배열의 1 인덱스는 banana다.", () => {
expect(arr[1]).toBe("banana");
});
});
예외처리 확인
예외처리는 toThrow를 통해 테스트가 가능하다.
function checkNum(number) {
if (typeof (number) === "number") {
return console.log(`작성하신 숫자는 : ${number} 입니다.`);
} else {
throw new Error("숫자를 작성하지 않으셨습니다.");
}
}
describe("예외처리 확인 예제", () => {
test("문자열을 입력하면 에러가 발생한다.", () => {
// 에러 발생여부를 확인한다.
expect(() => checkNum("안녕")).toThrow();
});
test("문자열을 입력하면 발생하는 에러문구 중에 `숫자`라는 글자가 들어간다.", () => {
// 에러 메시지에 '숫자'가 포함되어 있는지 확인
expect(() => checkNum("안녕")).toThrow(/숫자/);
});
});
'Testing > Jest' 카테고리의 다른 글
Jest: Only와 Skip 사용해보기 (0) | 2024.09.18 |
---|---|
Jest: Mock Function에 대해서 (0) | 2024.09.11 |
Jest : 테스트 전 후 작업 설정하기 (0) | 2024.09.11 |
Jest: 비동기 코드 테스트하기 (0) | 2024.09.11 |
Jest 사용하기 (0) | 2024.09.10 |