salsify-experiences-sdk
Version:
SDK to be used by commerce websites to implement product experiences.
40 lines (34 loc) • 1.16 kB
text/typescript
import Timeout from '../timeout'
const callbackMock = jest.fn()
describe('timeout', () => {
beforeEach(() => {
jest.useFakeTimers()
})
afterEach(() => {
jest.resetAllMocks()
jest.useRealTimers()
})
test('it should implement exponential backoff up until 5 minutes', async () => {
const timeout = new Timeout()
timeout.start(callbackMock)
jest.advanceTimersByTime(5000)
expect(callbackMock).toHaveBeenCalledTimes(1)
jest.advanceTimersByTime(20000)
expect(callbackMock).toHaveBeenCalledTimes(2)
jest.advanceTimersByTime(45000 + 80000 + 125000 + 180000 + 245000)
expect(callbackMock).toHaveBeenCalledTimes(7)
jest.advanceTimersByTime(300000)
expect(callbackMock).toHaveBeenCalledTimes(8)
jest.advanceTimersByTime(300000)
expect(callbackMock).toHaveBeenCalledTimes(9)
})
test('it should clear the timer', async () => {
const timeout = new Timeout()
timeout.start(callbackMock)
jest.advanceTimersByTime(5000)
expect(callbackMock).toHaveBeenCalledTimes(1)
timeout.clear()
jest.advanceTimersByTime(20000)
expect(callbackMock).toHaveBeenCalledTimes(1)
})
})