jest before, after (each, all), only, skip

2021. 3. 19. 21:18javascript/테스팅

이번에는 테스트를 진행하기 전후에 특정 함수를 실행시킬 수 있는 jest 제공 함수를 사용해봅시다. 

 

우선 각함수가 어떤 것을 의미하는지 알아봅시다.

 

 

beforeEach

여러 개의 테스트가 시작하기 전 각각의 실행되는 함수입니다. 우선 예제를 봅시다. 각 테스트를 실행하기 전에 number의 값을 바꾸어 주어서 이전에 beforeEach가 실행되고 있는 점을 확인할 수 있다. 

 

js

const fn = require("./hi");

let number = 1;
beforeEach(()=>{
    console.log(`각 테스트가 시작하기 전에 실행되는 함수입니다.${number}`);
});

test('3곱하기 3은 9', () => {
    expect(fn.add(3, 3)).toBe(9);
    number = 2;
});

test('4곱하기 2은 8', () => {
    expect(fn.add(4, 2)).toBe(8);
    number = 3;
});

test('2곱하기 1은 2', () => {
    expect(fn.add(2, 1)).toBe(2);
    number = 4;
});

test('5곱하기 5은 25', () => {
    expect(fn.add(5, 5)).toBe(25);
    number = 5;
});

 

beforeAll

이 함수의 경우에는 모든 테스트가 시작되기 전 가장 먼저 실행되는 함수입니다. 아래의 사진을 보면 beforeAll이 가장 먼저 사용된 것을 알 수 있다. 

 

const fn = require("./hi");

let number = 1;
beforeAll(()=>{
    console.log(`가장 먼저 실행되는 함수`);
});

beforeEach(()=>{
    console.log(`각 테스트가 시작하기 전에 실행되는 함수입니다.${number}`);
});

test('3곱하기 3은 9', () => {
    expect(fn.add(3, 3)).toBe(9);
    number = 2;
});

test('4곱하기 2은 8', () => {
    expect(fn.add(4, 2)).toBe(8);
    number = 3;
});

test('2곱하기 1은 2', () => {
    expect(fn.add(2, 1)).toBe(2);
    number = 4;
});

test('5곱하기 5은 25', () => {
    expect(fn.add(5, 5)).toBe(25);
    number = 5;
});

afterEach

afterEach는 각 테스트가 종료된 후 실행되는 함수입니다. 

const fn = require("./hi");

let number = 1;

afterEach(() => {
    console.log(`각 테스트가 종료된 후 실행되는 함수야. ${number}`);
});

test('3곱하기 3은 9', () => {
    expect(fn.add(3, 3)).toBe(9);
    number = 2;
});

test('4곱하기 2은 8', () => {
    expect(fn.add(4, 2)).toBe(8);
    number = 3;
});

test('2곱하기 1은 2', () => {
    expect(fn.add(2, 1)).toBe(2);
    number = 4;
});

test('5곱하기 5은 25', () => {
    expect(fn.add(5, 5)).toBe(25);
    number = 5;
});

 

afterAll

모든 테스트가 종료되고 난 후 실행되는 함수입니다. 아래 사진을 보면 모든 테스트가 종료되고 난 후에 실행되는 함수라는 것을 알 수 있다. 

const fn = require("./hi");

let number = 1;

afterEach(() => {
    console.log(`각 테스트가 종료되고 난 후에 실행되는 함수야.`);
});

afterAll(() => {
    console.log(`모든 테스트가 종료되고 난 후에 실행되는 함수야.`);
});

test('3곱하기 3은 9', () => {
    expect(fn.add(3, 3)).toBe(9);
    number = 2;
});

test('4곱하기 2은 8', () => {
    expect(fn.add(4, 2)).toBe(8);
    number = 3;
});

test('2곱하기 1은 2', () => {
    expect(fn.add(2, 1)).toBe(2);
    number = 4;
});

test('5곱하기 5은 25', () => {
    expect(fn.add(5, 5)).toBe(25);
    number = 5;
});

 

Describe

Describe는 비슷한 테스트를 묶어서 진행되는 코드입니다. 아래와 같은 테스트를 실행해보면 depth가 describe 밑으로 값이 나타나는 것을 확인할 수 있습니다. 

const fn = require("./hi");

let number = 1;


describe("곱하기 기능을 테스팅합니다.",()=>{
    test('3곱하기 3은 9', () => {
        expect(fn.add(3, 3)).toBe(9);
        number = 2;
    });
    
    test('4곱하기 2은 8', () => {
        expect(fn.add(4, 2)).toBe(8);
        number = 3;
    });
    
    test('2곱하기 1은 2', () => {
        expect(fn.add(2, 1)).toBe(2);
        number = 4;
    }); 
});

외부의 테스트와 비교해보면 depth가 있음을 볼 수 있다. 

Only, Skip

const fn = require("./hi");

let number = 1;

describe("곱하기 기능을 테스팅합니다.",()=>{
    test.only('3곱하기 3은 9', () => {
        expect(fn.add(3, 3)).toBe(9);
        number = 2;
    });
    
    test('4곱하기 2은 8', () => {
        expect(fn.add(4, 2)).toBe(8);
        number = 3;
    });
    
    test('2곱하기 1은 2', () => {
        expect(fn.add(2, 1)).toBe(2);
        number = 4;
    }); 
});

위의 요소를 보면 skipped가 되면서 only가 붙은 테스트만 실행되는 것을 알 수 있습니다. 

 

const fn = require("./hi");

let number = 1;

describe("곱하기 기능을 테스팅합니다.",()=>{
    test.skip('3곱하기 3은 9', () => {
        expect(fn.add(3, 3)).toBe(9);
        number = 2;
    });
    
    test('4곱하기 2은 8', () => {
        expect(fn.add(4, 2)).toBe(8);
        number = 3;
    });
    
    test('2곱하기 1은 2', () => {
        expect(fn.add(2, 1)).toBe(2);
        number = 4;
    }); 
});

skip이 붙은 함수만 skip된 것을 알 수 있습니다.