/
를 제외한 문자로 구성./
: 경로를 구성하는 구분자 역할이다.2개의 파일 이름은 새로운 디렉토리가 만들어질 때 항상 자동적으로 생성된다.
. (현재 위치)
.. (상위 위치)
/home/san
: 로그인시 위치/home/san/test
: 작업 위치/
로 시작../
로 시작.URL은 다음과 같이 구성되어 있다.
?
로 시작.&
로 구분.Jest는 JavaScript와 React 애플리케이션을 위한 테스트 프레임워크이며 facebook에서 개발했으며
단위 테스트, 통합 테스트, 엔드 투 엔드 테스트를 모두 지원한다.
특징
제스트(Jest)[1]는 메타(구 페이스북)가 유지보수하는 재스민 위에서 빌드되는 테스팅 프레임워크이다.[2] 바벨, 타입스크립트, Node.js, 리액트, 앵귤러, Vue.js, Svelte를 사용하는 프로젝트와 동작한다. 제스트는 테스팅 프레임워크의 최초 사용자들에게 많은 설정을 요구하지는 않는다.
참고 : https://ko.wikipedia.org/wiki/제스트_(프레임워크)
expect(테스트할 함수).Matcher(기대하는 결과값)
expect(2 + 2).toBe(4);
expect({ name: 'John' }).toEqual({ name: 'John' });
expect(null).toBeNull();
expect(undefined).toBeUndefined();
expect(definedValue).toBeDefined();
expect(trueValue).toBeTruthy();
expect(falseValue).toBeFalsy();
expect(10).toBeGreaterThan(9);
expect(10).toBeGreaterThanOrEqual(10);
expect(8).toBeLessThan(9);
expect(8).toBeLessThanOrEqual(8);
expect(0.1 + 0.2).toBeCloseTo(0.3, 5);
expect('team').toMatch(/ea/);
expect([1, 2, 3]).toContain(2);
expect([{ foo: 'bar' }]).toContainEqual({ foo: 'bar' });
describe 블록은 관련된 테스트 케이스를 그룹화하는 데 사용된다. 이를 통해 테스트 코드의 구조를 더 잘 이해할 수 있고, 특정 그룹의 테스트만 실행할 수도 있다.
describe('Math operations', () => {
test('adds 1 + 2 to equal 3', () => {
expect(1 + 2).toBe(3);
});
test('subtracts 5 - 2 to equal 3', () => {
expect(5 - 2).toBe(3);
});
});
beforeEach
와 afterEach
는 각각 각 테스트 케이스가 실행되기 전과 후에 사전 작업 혹은 사후 작업? 을 진행할 수 있다.
let value;
beforeEach(() => {
value = 0; // 각 테스트 전에 value를 초기화
});
afterEach(() => {
value = null; // 각 테스트 후에 value를 정리
});
test('increments value by 1', () => {
value += 1;
expect(value).toBe(1);
});
test('decrements value by 1', () => {
value -= 1;
expect(value).toBe(-1);
});
만약 매 테스트마다 진행할 필요 없고 통틀어 한번만 진행하면 될 때는 beforeAll
과 afterAll
을 사용하면 된다.
let database;
beforeAll(() => {
database = initializeDatabase(); // 모든 테스트 전에 데이터베이스 초기화
});
afterAll(() => {
closeDatabase(database); // 모든 테스트 후에 데이터베이스 닫기
});
test('database is initialized', () => {
expect(database).toBeDefined();
});
test('database has user data', () => {
expect(database.user).toBeDefined();
});
여러 케이스틑 테스트할 때는 each
를 이용하면 유용하다.
test.each
여러 개의 테스트 케이스를 정의할 때 사용.
배열에 정의된 각 입력 값에 대해 동일한 테스트를 반복 실행.
test.each([
[1, 1, 2],
[1, 2, 3],
[2, 1, 3],
[2, 2, 4],
])('adds %i and %i to equal %i', (a, b, expected) => {
expect(a + b).toBe(expected);
});
descirbe.each
descirbe
블록 안에서 여러개의 테스트를 할 때 사용.
describe.each([
['apple', 'fruit', true],
['carrot', 'vegetable', true],
['bread', 'grain', false],
])('Food: %s', (food, type, isHealthy) => {
test(`is of type ${type}`, () => {
const foodTypes = {
apple: 'fruit',
carrot: 'vegetable',
bread: 'grain',
};
expect(foodTypes[food]).toBe(type);
});
test(`is healthy: ${isHealthy}`, () => {
const healthyFoods = {
apple: true,
carrot: true,
bread: false,
};
expect(healthyFoods[food]).toBe(isHealthy);
});
});
특정 함수나 모듈의 동작을 모방(mock)하여 테스트할 수 있게 해준다.
이를 통해 실제 함수나 모듈을 호출하지 않고도 해당 함수나 모듈이 어떻게 호출되는지, 어떤 값을 반환하는지 등을 테스트할 수 있다.
Mock 함수 생성
가장 기본적인 방법은 jest.fn()을 사용해 생성하는 방법이다.
const mockFunction = jest.fn();
// 모의 함수 사용
mockFunction();
mockFunction('arg1', 'arg2');
// 호출된 횟수 확인
expect(mockFunction).toHaveBeenCalled();
expect(mockFunction).toHaveBeenCalledTimes(2);
// 특정 인수로 호출되었는지 확인
expect(mockFunction).toHaveBeenCalledWith('arg1', 'arg2');
mockReturnValue(value)
모의 함수가 호출될 때 항상 특정 값을 반환하도록 설정.
const mockFunction = jest.fn().mockReturnValue(42);
expect(mockFunction()).toBe(42);
mockResolvedValue(value)
모의 함수가 호출될 때 항상 Promise를 반환하고, 이 Promise는 지정된 값으로 resolve.
const mockFunction = jest.fn().mockResolvedValue('resolved value');
await expect(mockFunction()).resolves.toBe('resolved value');
mockRejectedValue(value)
모의 함수가 호출될 때 항상 Promise를 반환하고, 이 Promise는 지정된 값으로 reject.
const mockFunction = jest.fn().mockRejectedValue('rejected value');
await expect(mockFunction()).rejects.toBe('rejected value');
mockImplementation(fn)
모의 함수의 구현을 설정.
const mockFunction = jest.fn().mockImplementation((a, b) => a + b);
expect(mockFunction(1, 2)).toBe(3);
mockImplementationOnce(fn)
모의 함수의 구현을 한 번만 설정. 이후 호출에는 기본 구현이 사용.
const mockFunction = jest.fn()
.mockImplementationOnce(() => 'first call')
.mockImplementation(() => 'default');
expect(mockFunction()).toBe('first call');
expect(mockFunction()).toBe('default');
toHaveBeenCalled()
모의 함수가 호출되었는지 확인.
const mockFunction = jest.fn();
mockFunction();
expect(mockFunction).toHaveBeenCalled();
toHaveBeenCalledTimes(number)
모의 함수가 특정 횟수만큼 호출되었는지 확인.
const mockFunction = jest.fn();
mockFunction();
mockFunction();
expect(mockFunction).toHaveBeenCalledTimes(2);
toHaveBeenCalledWith(...args)
모의 함수가 특정 인수로 호출되었는지 확인.
const mockFunction = jest.fn();
mockFunction('arg1', 'arg2');
expect(mockFunction).toHaveBeenCalledWith('arg1', 'arg2');
toHaveBeenLastCalledWith(...args)
모의 함수가 마지막으로 호출될 때 특정 인수로 호출되었는지 확인.
const mockFunction = jest.fn();
mockFunction('first call');
mockFunction('second call');
expect(mockFunction).toHaveBeenLastCalledWith('second call');
toHaveBeenNthCalledWith(n, ...args)
모의 함수가 n번째 호출될 때 특정 인수로 호출되었는지 확인.
const mockFunction = jest.fn();
mockFunction('first call');
mockFunction('second call');
expect(mockFunction).toHaveBeenNthCalledWith(2, 'second call');
https://developer.mozilla.org/ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL
https://www.daleseo.com/js-node-fs/
https://velog.io/@skyu_dev/Jest-테스트-코드를-사용하여-JS의-기능-점검하기
https://creamereos.github.io/dev/2020/12/04/dev-nodeJS-etc-method/