setTimeout, setInterval, setImmediate, requestAnimationFrame
npm install time-test
(context: SetTimeoutContext) => (callback: () => any, delay: number) => number
import { makeSetTimeout, makeSetTimeoutContext, tickTimeout, getSetTimeoutCalls, } from 'time-test' // create context const context = makeSetTimeoutContext() // create setTimeout const setTimeout = makeSetTimeout(context) const tick = tickTimeout(context) // set a couple of callbacks setTimeout(() => { console.log('cb0 invoked') }, 100) setTimeout(() => { console.log('cb1 invoked') }, 200) setTimeout(() => { console.log('cb2 invoked') }, 300) // tick till NEXT callback in queue, // this effectively forwards 100ms // callback is fired synchronously tick() // -> cb0 invoked // tick with provided timeStep // lets pass another 250ms tick(250) // -> cb1 invoked -> cb2 invoked // check the calls expect(getSetTimeoutCalls(context)).deep.eq([ { delay: 100 }, { delay: 200 }, { delay: 300 } ])
(context: SetTimeoutContext) => (id: number) => void
import { makeSetTimeoutContext, makeSetTimeout, makeClearTimeout, getSetTimeoutCalls, getClearTimeoutCalls, } from 'time-test' // create context const context = makeSetTimeoutContext() // create setTimeout const setTimeout = makeSetTimeout(context) // create clearTimeout const clearTimeout = makeClearTimeout(context) const id = setTimeout(() => {}, 100) // clear by id clearTimeout(id) // check the state expect(getSetTimeoutCalls(context)).deep.eq([ { delay: 100 } ]) expect(getClearTimeoutCalls(context)).deep.eq([ { id: 0 } ])
(context: SetIntervalContext) => (callback: () => any, delay: number) => number
import { makeSetInterval, makeSetIntervalContext, tickInterval, getSetIntervalCalls, } from 'time-test' // create context const context = makeSetIntervalContext() // create setInterval const setInterval = makeSetInterval(context) const tick = tickInterval(context) // set a couple of callbacks setInterval(() => { console.log('cb0 invoked') }, 100) setInterval(() => { console.log('cb1 invoked') }, 200) // tick till NEXT callback in queue, // this effectively forwards 100ms // callback is fired synchronously tick() // -> cb0 invoked // tick with provided timeStep // lets pass another 250ms tick(250) // -> cb0 invoked -> cb1 invoked // check the state expect(getSetIntervalCalls(context)).deep.eq([ { delay: 100 }, { delay: 200 }, ])
(context: SetIntervalContext) => (id: number) => void
import { makeSetInterval, makeSetIntervalContext, getSetIntervalCalls, getClearIntervalCalls, } from 'time-test' // create context const context = makeSetIntervalContext() // create setInterval const setInterval = makeSetInterval(context) const clearInterval = makeClearInterval(context) // set a callbacks const id = setInterval(() => {}, 100) // clear clearInterval(id) // check the state expect(getSetIntervalCalls(context)).deep.eq([ { delay: 100 }, ]) expect(getClearIntervalCalls(context)).deep.eq([ { id: 0 } ])
(context: SetImmediateContext) => (callback: () => any) => number
import { makeSetImmediate, makeSetImmediateContext, tickImmediate, getSetImmediateCalls, } from 'time-test' // create context const context = makeSetImmediateContext() // create setImmediate const setInterval = makeSetImmediate(context) const tick = tickImmediate(context) // set a couple of callbacks setImmediate(() => { console.log('cb0 invoked') }) setImmediate(() => { console.log('cb1 invoked') }) // tick ALL callbacks in queue, // callbacks are fired synchronously tick() // -> cb0 invoked -> cb1 invoked // check the state expect(getSetImmediateCalls(context)).deep.eq([ {}, {}, ])
(context: SetImmediateContext) => (id: number) => void
import { makeSetImmediate, makeSetImmediateContext, getSetImmediateCalls, getClearImmediateCalls, } from 'time-test' // create context const context = makeSetImmediateContext() // create setImmediate const setImmediate = makeSetImmediate(context) const clearImmediate = makeClearImmediate(context) // set a callbacks const id = setImmediate(() => {}, 100) // clear clearImmediate(id) // check the state expect(getSetImmediateCalls(context)).deep.eq([ {}, ]) expect(getClearImmediateCalls(context)).deep.eq([ { id: 0 } ])
(context: RequestAnimationFrameContext) => (callback: () => any) => number
import { makeRequestAnimationFrame, makeRequestAnimationFrameContext, tickAnimation, getRequestAnimationFrameCalls, } from 'time-test' // create context const context = makeRequestAnimationFrameContext() // create requestAnimationFrame const requestAnimationFrame = makeRequestAnimationFrame(context) const tick = tickAnimation(context) // set a couple of callbacks requestAnimationFrame(() => { console.log('cb0 invoked') }) requestAnimationFrame(() => { console.log('cb1 invoked') }) // tick ALL callbacks in queue, // callbacks are fired synchronously tick() // -> cb0 invoked -> cb1 invoked // check the state expect(getRequestAnimationFrameCalls(context)).deep.eq([ {}, {}, ])
(context: RequestAnimationFrameContext) => (callback: () => any) => number
import { makeRequestAnimationFrame, makeCancelAnimationFrame, makeRequestAnimationFrameContext, getRequestAnimationFrameCalls, getCancelAnimationFrameCalls, } from 'time-test' // create context const context = makeRequestAnimationFrameContext() // create requestAnimationFrame const requestAnimationFrame = makeRequestAnimationFrame(context) const cancelAnimationFrame = makeCancelAnimationFrame(context) // set a couple of callbacks const id = requestAnimationFrame(() => { console.log('cb0 invoked') }) cancelAnimationFrame(id) // check the state expect(getRequestAnimationFrameCalls(context)).deep.eq([ {}, ]) expect(getCancelAnimationFrameCalls(context)).deep.eq([ { id: 0 }, ])