ํ์ด๋จธ ํ ์คํธ
๋๋ฐ์ด์ค : ํน์ ํจ์์ ํธ์ถ ํ์๋ฅผ ์ ํ
- ์ฃผ๋ก ์คํฌ๋กค์ฒ๋ผ ๋๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฐ์ํ ๋ ์ฑ๋ฅ ๊ฐ์ ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
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);
});
