ํƒ€์ด๋จธ ํ…Œ์ŠคํŠธ

date
2025-10-18
order
8

ํƒ€์ด๋จธ ํ…Œ์ŠคํŠธ

๋””๋ฐ”์šด์Šค : ํŠน์ • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ์ œํ•œ

  • ์ฃผ๋กœ ์Šคํฌ๋กค์ฒ˜๋Ÿผ ๋Œ€๋Ÿ‰์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
export const debounce = (fn, wait) => {
  let timeout = null;

  return (...args) => {
    const later = () => {
      timeout = -1;
      fn(...args);
    };

    if (timeout) {
      clearTimeout(timeout);
    }
    timeout = window.setTimeout(later, wait);
  };
};

ํƒ€์ด๋จธ ๋ชจํ‚น

beforeEach(() => {
    vi.useFakeTimers();
});
afterEach(() => {
	vi.useRealTimers();
});
  
it('์—ฐ์ด์–ด ํ˜ธ์ถœํ•ด๋„ ๋งˆ์ง€๋ง‰ ํ˜ธ์ถœ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •๋œ ํƒ€์ด๋จธ ์‹œ๊ฐ„์ด ์ง€๋‚œ ๊ฒฝ์šฐ์—๋งŒ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.', () => {
    const spy = vi.fn();

    const debouncedFn = debounce(spy, 300);

    debouncedFn();
    vi.advanceTimersByTime(200);
    debouncedFn();
    vi.advanceTimersByTime(100);
    debouncedFn();
    vi.advanceTimersByTime(200);
    debouncedFn();
    vi.advanceTimersByTime(300);
    debouncedFn();

    expect(spy).toHaveBeenCalledTimes(1);
});