// 테스트 하기 위해 흉내만 내는 함수
const mockFn = jest.fn(); // mok 함수 생성
mockFn();
mockFn(1);
test("함수는 2번 호출됩니다", () => {
expect(mockFn.mock.calls.length).toBe(2); // calls 의 길이는 호출된 횟수
});
test("2번째로 호출된 함수에 전달된 첫번째 인수는 1입니다.", () => {
expect(mockFn.mock.calls[1][0]).toBe(1);
});
// Test Suites: 1 passed, 1 total
// Tests: 2 passed, 2 total
const mockFn = jest.fn(); // mok 함수 생성
function forEachAdd1(arr) {
arr.forEach((num) => {
mockFn(num + 1); // 빠르고 간단한 테스트를 위해서 목함수 사용 해 보자.
});
}
forEachAdd1([10, 20, 30]);
test("함수 호출은 3번 됩니다.", () => {
expect(mockFn.mock.calls.length).toBe(3);
});
test("전달 된 값은 11, 21, 31 입니다.", () => {
expect(mockFn.mock.calls[0][0]).toBe(11);
expect(mockFn.mock.calls[1][0]).toBe(21);
expect(mockFn.mock.calls[2][0]).toBe(31);
});
// Test Suites: 1 passed, 1 total
// Tests: 2 passed, 2 total
const func = require("./func"); // func.js 요청
const mockFn = jest.fn((num) => num + 1); // 첫번째 인자로 함수를 넘겨준다.
mockFn(10);
mockFn(20);
mockFn(30);
// results 에는 return 된 값이 배열로 들어간다.
test("10에서 1 증가한 값이 반환된다.", () => {
console.log(mockFn.mock.results[0]); // { type: 'return', value: 11 }
expect(mockFn.mock.results[0].value).toBe(11);
});
test("20에서 1 증가한 값이 반환된다.", () => {
console.log(mockFn.mock.results[1]); // { type: 'return', value: 21 }
expect(mockFn.mock.results[1].value).toBe(21);
});
test("30에서 1 증가한 값이 반환된다.", () => {
console.log(mockFn.mock.results[2]); // { type: 'return', value: 31 }
expect(mockFn.mock.results[2].value).toBe(31);
})
const func = require("./func"); // func.js 요청
const mockFn = jest.fn(); // mok 함수 생성
// 실행 할 때마다 다른 값을 return 해 줄수도 있다.
// 중간에 return 값을 바꾸려면 once 를 붙여주면 된다.
mockFn
.mockReturnValueOnce(10)
.mockReturnValueOnce(20)
.mockReturnValueOnce(30)
.mockReturnValue(40);
mockFn();
mockFn();
mockFn();
mockFn();
test("dd", () => {
console.log(mockFn.mock.results);
expect("dd").toBe("dd");
});
console.log
[
{ type: 'return', value: 10 },
{ type: 'return', value: 20 },
{ type: 'return', value: 30 },
{ type: 'return', value: 40 }
]
// test 할 때마다 user 를 생성 하는건 비효율적이다. 그렇다고 만든 다음 다시 rollback 하는것도
// 그럴 때 사용가능
const func = require("./func"); // func.js 요청
jest.mock('/func'); // func 를 모킹 모듈로 만든다.
func.createUser.mockReturnValue({name: "malza"});
// 실제로 func 의 createUser가 호출 되는 것이 아니다. {name: "malza"} 객체를 반환해주는
// mok 함수가 실행 될 뿐이다.
test("유저를 만든다", () =>{
const user = func.createUser("malza");
expect(user.name).toBe("malza");
});
const func = require("./func"); // func.js 요청
const mockFn = jest.fn(); // mok 함수 생성
mockFn(10, 20);
mockFn();
mockFn(30, 40, 50);
// 한번이라도 통과되었다면 통과
test("한번 이상 호출?", () => {
expect(mockFn).toBeCalled();
});
test("몇 번 호출?", () => {
expect(mockFn).toBeCalledTimes(3);
});
// 인수로 어떤 값을 전달받았는지 체크
test("10이랑 20 전달 받은 함수가 있는가?", () => {
expect(mockFn).toBeCalledWith(10, 20);
});
// 인수를 체크하는건 동일하지만 마지막에 받은 인수를 체크한다
test("마지막 함수는 30, 40, 50 을 받았는가?", () => {
expect(mockFn).lastCalledWith(30, 40, 50);
});
// Test Suites: 1 passed, 1 total
// Tests: 4 passed, 4 total