test("2 + 3 은 5야", () => {
expect(func.add(2, 3)).toBe(5); // 검증할 값, 기대 되는 값
});
test("2 + 3 은 5야", () => {
expect(func.add(2, 3)).toEqual(5);
});
// Test Suites: 1 passed, 1 total
// Tests: 2 passed, 2 total
// 둘 다 통과
test("이름과 나이를 전달받아 객체를 반환해주세여", () => {
expect(func.makeUser("malza", 29)).toBe({
name: "malza",
age: 29,
});
});
// 결과는? 실패! 왜?
// 객체나 배열은 재귀적으로 돌면서 값을 확인해야 하기 때문에 toEqual 사용해야 한다.
test("이름과 나이를 전달받아 객체를 반환해주세여", () => {
expect(func.makeUser("malza", 29)).toEqual({
name: "malza",
age: 29,
});
});
// Test Suites: 1 failed, 1 total
// Tests: 1 failed, 1 passed, 2 total
// 1 passed 로 toEqual 이 성공한 것을 볼 수 있다.
// 그런데 If it should pass with deep equality, replace "toBe" with "toStrictEqual" 라는 문구가 보인다.
const func = require("./func"); // func.js 요청
test("이름과 나이를 전달받아 객체를 반환해주세여", () => {
expect(func.makeUser("malza", 29)).toEqual({
name: "malza",
age: 29,
});
});
test("이름과 나이를 전달받아 객체를 반환해주세여", () => {
expect(func.makeUser("malza", 29)).toStrictEqual({
name: "malza",
age: 29,
});
});
// Test Suites: 1 passed, 1 total
// Tests: 2 passed, 2 total
// 둘 다 통과 되었다.
// 그렇다면 ./func 로 가서 좀 수정을 해보자.
// 원래 코드는
const fn = {
add: (num1, num2) => num1 + num2,
makeUser: (name, age) => ({ name, age}),
};
module.exports = fn;
==========================================
// gender 를 추가 해 보자.
const fn = {
add: (num1, num2) => num1 + num2,
makeUser: (name, age) => ({ name, age, gender: undefined }),
};
module.exports = fn;
// 다시 테스트 해 보면 결과는?
// Test Suites: 1 failed, 1 total
// Tests: 1 failed, 1 passed, 2 total
// toEqual 은 통과 되었고, toStrictEqual 은 통과하지 못했다.
// 보다 엄격하게 검사하여 정확하게 따지고 들어간다.
const func = require("./func"); // func.js 요청
// toBeNull
// toBeUndefined
// toBeDefined
test("null은 null 입니다.", () => {
expect(null).toBeNull();
});
test("UndeFined는 UndeFined 입니다.", () => {
expect(undefined).toBeUndefined(undefined);
});
test("1는 deFined 입니다.", () => {
expect(1).toBeDefined();
});
// toBeTruthy
// toBeFalsy
test("0은 false 입니다.", () => {
expect(func.add(1, -1)).toBeFalsy();
});
// √ null은 null 입니다. (2 ms)
// √ UndeFined는 UndeFined 입니다.
// √ 1는 deFined 입니다. (1 ms)
// √ 0은 false 입니다.
// Test Suites: 1 passed, 1 total
// Tests: 4 passed, 4 total
// toBeGreaterThan
// toBeGreaterThanOrEqual
// toBeLessThan
// toBeLessThanOrEqual
test("ID는 10자 이하여야 합니다.", () => {
const id = `Malza's file`;
expect(id.length).toBeLessThanOrEqual(10);
});
// Test Suites: 1 failed, 1 total
// Tests: 1 failed, 1 total
// 12글자니까 10보다 작거나 같지 않다. 따라서 실패!
test("password는 4자리이다.", () => {
const pw = "1234";
expect(pw.length).toBe(4); // or toEqual(4)
});
// 성공!
test("0.1 + 0.2 는 0.3이다.", () => {
expect(func.add(0.1, 0.2)).toBe(0.3); // or toEqual(4)
});
//성공?? 아니 실패했다.
// Expected: 0.3
// Received: 0.30000000000000004
// 2진법으로 소수를 표현해야 하기 때문.
// 이럴때는
test("0.1 + 0.2 는 0.3이다.", () => {
expect(func.add(0.1, 0.2)).toBeCloseTo(0.3); // or toEqual(4)
});
// 성공!
// toMatch 로 문자열을 판별 가능
test("hello, malza 에 a 라는 글자가 있나요?", () => {
expect("hello, malza").toMatch(/a/);
});
// 성공. 대소문자를 구분한다. 구분하고 싶지 않다면 /a/i 해준다.
// 배열
test("User List 에 malza 가 포함 되어 있나요?", () => {
const Users = ["mike", "malza", "mina"];
expect(Users).toContain("malza");
});
// func.js 수정
const fn = {
add: (num1, num2) => num1 + num2,
makeUser: (name, age, gender) => ({ name, age, gender }),
throwErr: () => {
throw new Error("Error no.1");
},
};
module.exports = fn;
///////////////////////////////////////////
// func.test.js
test("에러 나나요?", () => {
expect(() => func.throwErr()).toThrow("Error no.1");
});
// 통과!
test("에러 나나요?", () => {
expect(() => func.throwErr()).toThrow("Error no.2");
});
//실패! Error no.2 를 발견하지 못했다.
외에도 많다. 사이트 들어가서 찾아가면서 쓰면 된다. 😂