2 분 소요

값이 같은지(근사치인지) 판단하는 테스트

fn.js

const fn = {
  add: (a,b) => a+b,
  makeUser: (name,age) => ({name,age,gender:undefined})
};
module.exports = fn;

fn.test.js

const fn = require("./fn");

test("2 더하기 3은 5야", () => {
  expect(fn.add(2,3)).toBe(5);
}); // 테스트 성공

test("이름과 나이를 전달받아서 반환해줘", () => {
  expect(fn.makeUser("Mike",30)).toEqual({
    name: "Mike",
    age: 30,
  });
}); // 테스트 성공

test("이름과 나이를 전달받아서 반환해줘", () => {
  expect(fn.makeUser("Mike",30)).toStrictEqual({
    name: "Mike",
    age: 30,
  });
}); // 테스트 실패

toBe

숫자를 비교

toBeCloseTo

소수점을 비교

test("0.2 더하기 0.3은 0.5야", () => {
  expect(fn.add(0.2,0.3)).toBe(0.5);
}); // 테스트 실패

test("0.2 더하기 0.3은 0.5야", () => {
  expect(fn.add(0.2,0.3)).toBeCloseTo(0.5);
}); // 테스트 성공

자바스크립트는 소수점을 정확히 계산하지 못한다. (컴퓨터는 이진법을 사용하기 때문에 소수를 이진수로 바꿨을 때 몇몇 값은 무한소수가 됨)
따라서 소수점을 테스트하기 위해서는 toBeCloseTo를 사용한다.

toEqual

숫자 + 객체나 배열의 값 비교
원시적인 타입(number, boolean, string, null)을 사용한다면 toBe와 toEqual 사이에 큰 차이점이 없다.

toStrictEqual

엄격한 Equal로 특정 요소에 undefined를 허용하지 않음

null, define, undefine과 관련된 테스트

toBeNull

Null인 경우 통과

test("null은 null입니다.", () => {
  expect(null).toBeNull();
}); // 테스트 성공

toBeUndefined

Undefined인 경우 통과

toBeDefined

Defined인 경우 통과

불리언(boolean)와 관련된 테스트

toBeTruthy

True인 경우 통과

test("비어있지 않은 문자열은 true입니다", () => {
  expect(fn.add("hello","world")).toBeTruthy();
}); // 테스트 성공

toBeFalsy

False인 경우 통과

test("0은 false입니다.", () => {
  expect(fn.add(1,-1)).toBeFalsy();
}); // 테스트 성공

숫자와 관련된 테스트

사용자 입력한 아이디의 길이를 제한하거나, 업로드된 파일의 크기가 적당한지 판별할 때 유용하다.

toBeGreaterThan

크다

toBeGreaterThanOrEqual

크거나 같다

toBeLessThan

작다

toBeLessThanOrEqual

작거나 같다

test("ID는 10자 이하여야 합니다.", () => {
  const id = "THE_BLACK_ORDER";
  expect(id.length).toBeLessThanOrEqual(10);
}); // 테스트 실패

+) 정확하게 같은지 확인할 때는 앞서 배운 toBe를 이용한다.

test("비밀번호는 4자리여야 합니다.", () => {
  const pw = "1234";
  expect(pw.length).toBe(4);
}); // 테스트 성공

문자열과 관련된 테스트

정규표현식과 toMatch

test("Hello World에 a라는 글자가 있나?", () => {
  expect("Hello World").toMatch(/a/);
}); // 테스트 실패

test("Hello World에 H라는 글자가 있나?", () => {
  expect("Hello World").toMatch(/H/);
}); // 테스트 성공

test("Hello World에 H라는 글자가 있나?", () => {
  expect("Hello World").toMatch(/h/);
}); // 테스트 실패 // toMatch는 대소문자를 구분함!

test("Hello World에 H라는 글자가 있나?", () => {
  expect("Hello World").toMatch(/h/i);
}); // 테스트 성공 // 대소문자를 구분하지 않도록 마지막에 i 붙이기

배열과 관련된 테스트

toContain

배열에 특정 요소가 있다면 통과

test("유저 리스트에 Mike가 있나?", () => {
  const user="Mike";
  const userList=["Tom","Mike","Kai"];
  expect(userList).toContain(user);
}); // 테스트 성공

예외와 관련된 테스트

fn.js

const fn = {
  add: (a,b) => a+b,
  makeUser: (name,age) => ({name,age,gender:undefined})
  throwErr: () => {
    throw new Error("xx");
  },
};
module.exports = fn;

toThrow

예외가 발생하면 통과

test("이거 에러 나나요?", () => {
  expect(() => fn.throwErr()).toThrow();
}); // 테스트 성공

test("oo 에러 나나요?", () => {
  expect(() => fn.throwErr()).toThrow("oo");
}); // 테스트 실패 // oo에러가 아니라 xx에러 발생

test("xx 에러 나나요?", () => {
  expect(() => fn.throwErr()).toThrow("xx");
}); // 테스트 성공

그 외 다양한 Matchers

jestjs.io

참고

코딩앙마



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기