테스트가 수행되기 전에 반복적으로 발생할 필요가 있는 설정과, 수행된 이후에 반복적으로 발생할 필요가 있는 작업(예를 들어 테스트의 전후값 초기화, DB의 disconnect 동작 수행 등)이 있다. 이런 작업들을 반복 처리 가능하도록 jest에서는 해당 기능을 제공하고 있다.
만약 테스트 전 후로 테스트의 전후값 초기화 등이 발생하지 않는다면, 아래 예제처럼 변수 num이 1로 일관성 있게 유지되지 않기 때문에 원하는 테스트 결과를 얻을 수가 없다.
const sum = require("../sum");
describe("sum 테스트", () => {
let num = 1;
test("1더하기 2는 3이다.", () => {
// num은 3이 됨
num = sum(num, 2);
expect(num).toBe(3);
});
test("1더하기 3은 4다.", () => {
// num이 3이므로, 기대값이 6이 나와야 함
num = sum(num, 3);
expect(num).toBe(4);
});
});
beforeEach / afterEach
beforeEach는 매 테스트가 시행되기 전에 처리되고, afterEach는 매 테스트가 실행되고 난 후에 처리된다. 이를 통해서 각 테스트를 독립적이고 일관된 상태에서 실행할 수 있다.
const sum = require("../sum");
describe("sum 테스트", () => {
let num;
beforeEach(() => {
num = 1;
});
//이 예제에서는 afterEach가 특별히 필요없지만 예제를 위해 작성했다.
afterEach(() => {
num = null;
});
test("1더하기 2는 3이다.", () => {
num = sum(num, 2);
expect(num).toBe(3);
});
test("1더하기 3은 4다.", () => {
num = sum(num, 3);
expect(num).toBe(4);
});
});
beforeEach나 afterEach를 사용해서 매 테스트 마다 로직을 시행하여 각 테스트마다 동일한 num의 값을 가질 수 있게 하였기 때문에 원하는 테스트 결과를 얻을 수 있다.
beforeAll / afterAll
beforeEach와 afterEach의 경우에는 매 테스트마다 반복적으로 시행하는 작업에 사용되었다. 테스트를 할 때 최초 한 번, 그리고 최후에 한 번만 실행하기 위해서는 beforeAll과 afterAll을 사용한다. beforeAll은 전체 테스트 전에 한 번, afterAll은 전체 테스트 후에 한 번 시행된다.
const sum = require("../sum");
describe("sum 테스트", () => {
beforeAll(() => {
console.log("sum 테스트 이전에 시행");
});
afterAll(() => {
console.log("sum 테스트 이후에 시행");
});
test("1더하기 2는 3이다.", () => {
expect(sum(1, 2)).toBe(3);
});
test("1더하기 3은 4다.", () => {
expect(sum(1, 3)).toBe(4);
});
});
test가 두 개가 있지만 beforeAll과 afterAll은 각각 한 번씩만 수행된 것을 볼 수 있다.
beforeEach, afterEach, beforeAll, afterAll의 경우 describe 블록 밖에 선언된 경우 전체 로직에 적용되고, describe 블록 내에 선언된 경우 해당 블록 내의 테스트에만 적용된다.
적용순서
- (describe 블록 밖) beforeAll : 전체 테스트 실행 전
- (describe 블록 안) beforeAll : 해당 블록 내 모든 테스트 실행 전
- (describe 블록 밖) beforeEach : 각 테스트 전에
- (describe 블록 안) beforeEach : 해당 블록 내 각 테스트 전에
- (describe 블록 안) afterEach : 해당 블록 내 각 테스트 후에
- (describe 블록 밖) afterEach : 각 테스트 후에
- (describe 블록 안) afterAll : 해당 블록 내 모든 테스트 실행 후
- (describe 블록 밖) afterAll : 전체 테스트 실행 후
'Testing > Jest' 카테고리의 다른 글
Jest: Only와 Skip 사용해보기 (0) | 2024.09.18 |
---|---|
Jest : Matcher에 대해서 (1) | 2024.09.18 |
Jest: Mock Function에 대해서 (0) | 2024.09.11 |
Jest: 비동기 코드 테스트하기 (0) | 2024.09.11 |
Jest 사용하기 (0) | 2024.09.10 |