๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Dev/ํ…Œ์ŠคํŠธ

[Jest] Jest ํ•จ์ˆ˜ ์‹คํ–‰ ์ˆœ์„œ

 

Jest Globals

ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ธ Jest์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ „์—ญ ๊ฐ์ฒด์™€ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

beforeAll

  • ํŒŒ์ผ ์•ˆ์˜ ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, promise๊ฐ€ ์ดํ–‰(fulfilled)๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „์—ญ ์ƒํƒœ๋ฅผ ์„ค์ •(set up)ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

beforeEach

  • ํŒŒ์ผ ์•ˆ์˜ ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, promise๊ฐ€ ์ดํ–‰(fulfilled)๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • ๊ฐ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „์—ญ ์ƒํƒœ๋ฅผ ์žฌ์„ค์ •(reset)ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

afterAll

  • ํŒŒ์ผ ์•ˆ์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, promise๊ฐ€ ์ดํ–‰(fulfilled)๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ „๋ฐ˜์— ๊ฑธ์ณ ์‚ฌ์šฉ๋˜๋Š” ์ „์—ญ ์ƒํƒœ๋ฅผ ์ •๋ฆฌ(clean up)ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

afterEach

  • ํŒŒ์ผ ์•ˆ์˜ ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, promise๊ฐ€ ์ดํ–‰(fulfilled)๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • ๊ฐ ํ…Œ์ŠคํŠธ์—์„œ ์ƒ์„ฑ๋œ ์ž„์‹œ ์ƒํƒœ๋ฅผ ์ •๋ฆฌ(clean up)ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

describe

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌถ์–ด์„œ ๊ทธ๋ฃนํ™”ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ชฉ์ ์˜ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, beforeAll, beforeEach, afterAll, afterEach์™€ ๊ฐ™์ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋กœ์ง์„ ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

it / test

  • ํ…Œ์ŠคํŠธํ•  ๋‚ด์šฉ์„ ์ ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, promise๊ฐ€ ์ดํ–‰(fulfilled)๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

 

์‹คํ–‰ ์ˆœ์„œ

describe๊ฐ€ ์ค‘์ฒฉ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, < beforeAll - beforeEach - test - afterEach - afterAll > ์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋˜๊ฒ ์ฃ . 

describe๊ฐ€ ์ค‘์ฒฉ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์•„๋ž˜์™€ ๊ฐ™์ด describe ๋ธ”๋ก ์•ˆํŒŽ์— globals ํ•จ์ˆ˜๋“ค์„ ๋ฐฐ์น˜ํ–ˆ์„ ๋•Œ ์–ด๋–ค ์ˆœ์„œ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

describe('Sample Test', () => {
  beforeAll(() => {
    console.log('โœ… Outer before all');
  });

  beforeEach(() => {
    console.log('โœ… Outer before each');
  });

  describe('sample test', () => {
    beforeAll(() => {
      console.log('โœ… Inner before all');
    });
    
    beforeEach(() => {
      console.log('โœ… Inner before Each');
    });
    
    test('test1', () => {
      console.log('โœ… Sample test1');
      expect(true).toBe(true);
    });
    
    test('test2', () => {
      console.log('โœ… Sample test2');
      expect(true).toBe(true);
    });

    afterEach(() => {
      console.log('โœ… Inner after each');
    });

    afterAll(() => {
      console.log('โœ… Inner after all');
    });
  });

  afterEach(() => {
    console.log('โœ… Outer after each');
  });

  afterAll(() => {
    console.log('โœ… Outer after all');
  });
});

 

๊ฒฐ๊ณผ

 

    โœ… Outer before all
    โœ… Inner before all
    โœ… Outer before each
    โœ… Inner before Each
    โœ… Sample test1
    โœ… Inner after each
    โœ… Outer after each
    โœ… Outer before each
    โœ… Inner before Each
    โœ… Sample test2
    โœ… Inner after each
    โœ… Outer after each
    โœ… Inner after all
    โœ… Outer after all

 

์ •๋ฆฌ

์ค‘์ฒฉ๋œ describe ๋ธ”๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • ๋‚ด๋ถ€์— ์žˆ๋Š” beforeAll์€ ์™ธ๋ถ€์— ์žˆ๋Š” beforeEach๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • beforeEach๋Š” ์™ธ๋ถ€์— ์žˆ๋“  ๋‚ด๋ถ€์— ์žˆ๋“ , test ๋ธ”๋ก๋งˆ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ์™ธ๋ถ€์— ์žˆ๋Š” beforeEach๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ์ดํ›„ ๋‚ด๋ถ€์— ์žˆ๋Š” beforeEach๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • afterEach๋„ ์™ธ๋ถ€์— ์žˆ๋Š” ๋‚ด๋ถ€์— ์žˆ๋“ , test ๋ธ”๋ก๋งˆ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ๋‚ด๋ถ€์— ์žˆ๋Š” afterEach๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ์ดํ›„ ์™ธ๋ถ€์— ์žˆ๋Š” afterEach๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. (beforeEach์™€ ๋ฐ˜๋Œ€)

beforeEach๊ฐ€ ์™ ์ง€ ์˜๋„๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‹คํ–‰์ˆœ์„œ์™€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 

 

 

์ฐธ๊ณ 

1. https://jestjs.io/docs/setup-teardown 

2. https://joshua-toth.medium.com/jests-beforeeach-may-not-be-running-the-way-you-think-it-does-c81599d83649