코딩앙마의 Jest 강좌를 기반으로 작성되었습니다.
https://www.youtube.com/playlist?list=PLZKTXPmaJk8L1xCg_1cRjL5huINlP2JKt
: toBe 뒤에 나오는 함수를 Matcher라고 저장
예시 코드는 다음과 같다.
test("1은 1이야", () => {
expect(1).toBe(1);
});
test("2 더하기 3은 5야.", () => {
expect(fn.add(2, 3).toBe(5);
});
test("3 더하기 3은 5가 아니야.", () => {
expect(fn.add(3, 3).not.toBe(5);
});
예시 코드는 다음과 같다.
// fn.js
// 객체를 만들어서 리턴해주는 함수 makeUser
const fn = {
makeUser: (name, age) => ({name, age, gender: undefined}),
);
module.exports = fn;
// fn.test.js
test("이름과 나이를 전달받아서 객체를 반환해줘 (toEqual)를 사용", () => {
expect(fn.makeUser("Mike", 30)).toEqual({
name: "Mike",
age: 30,
});
});
test("이름과 나이를 전달받아서 객체를 반환해줘 (toStrictEqual)를 사용", () => {
expect(fn.makeUser("Mike", 30)).toStrictEqual({
name: "Mike",
age: 30,
});
});
test("0.1 더하기 0.2는 0.3입니다", () => {
expect(fn.add(0.1, 0.2)).toBeCloseTo(0.3);
});
test("Hello World 에 a라는 글자가 있는가?", () => {
expect("Hello World").toMatch(/H/);
});
test("유저 리스트에 Mike가 있는가", () => {
const user = "Mike";
const userList = ["Tom", "Mike"];
expect(userList).toContain(user);
});
// fn.js에 throwErr 함수 추가
const fn = {
throwErr : () => {
throw new Error('xx');
}
};
// fn.test.js
// 아무거나 에러가 발생했는지만을 확인
test("이거 에러가 나나요?", () => {
expect(() => fn.throwErr().toThrow());
});
// 특정 에러가 발생한건지를 확인
test("이거 xx 에러가 나나요?", () => {
expect(() => fn.throwErr().toThrow('xx'));
});
// fn.js
const fn = {
getName : callback => {
const name = "Mike";
setTimeout(() => {
callback(name);
}, 3000);
),
};
// fn.test.js
// 아무거나 에러가 발생했는지만을 확인
test("3초 후에 받아온 이름은 Mike", done => {
function callback(name) {
expect((name).toBe('Mike');
done(); // 이걸 만나야 비로소 종료
}
fn.getName(callback); // callback 함수를 넘겨줌
});
// fn.js
const fn = {
getAge: () => {
const age = 30;
return new Promise((res, rej) => {
setTimeout(() => {
res(age);
}, 3000);
});
},
};
// fn.test.js
// 아무거나 에러가 발생했는지만을 확인
test("3초 후에 받아온 이름은 Mike", () => {
return fn.getAge().then(age => {
expect(age).toBe(30);
});
});
// ❗️ 위 함수를 간단하게 하기 위해서 matcher 사용 가능
// 🔥 resolves, rejects 를 사용
test("3초 후에 받아온 이름은 Mike", () => {
return expect(fn.getAge()).resolves.toBe(30);
});
// getAge() 함수는 위와 동일
// fn.test.js
// 아무거나 에러가 발생했는지만을 확인
test("3초 후 나이 30", async () => {
const age = await fn.getAge();
expect(age).toBe(30);
});
아래 예시로 숫자를 초기화하는 로직을 추가해보면 다음과 같다.
// getAge() 함수는 위와 동일
// fn.test.js
// 아무거나 에러가 발생했는지만을 확인
test("3초 후 나이 30", async () => {
const age = await fn.getAge();
expect(age).toBe(30);
});