scheduler.spec.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { queueJob, nextTick } from '../src/index'
  2. describe('scheduler', () => {
  3. it('queueJob', async () => {
  4. const calls: any = []
  5. const job1 = () => {
  6. calls.push('job1')
  7. }
  8. const job2 = () => {
  9. calls.push('job2')
  10. }
  11. queueJob(job1)
  12. queueJob(job2)
  13. expect(calls).toEqual([])
  14. await nextTick()
  15. expect(calls).toEqual(['job1', 'job2'])
  16. })
  17. it('queueJob while already flushing', async () => {
  18. const calls: any = []
  19. const job1 = () => {
  20. calls.push('job1')
  21. // job1 queues job2
  22. queueJob(job2)
  23. }
  24. const job2 = () => {
  25. calls.push('job2')
  26. }
  27. queueJob(job1)
  28. expect(calls).toEqual([])
  29. await nextTick()
  30. expect(calls).toEqual(['job1', 'job2'])
  31. })
  32. it('queueJob w/ postFlushCb', async () => {
  33. const calls: any = []
  34. const job1 = () => {
  35. calls.push('job1')
  36. }
  37. const job2 = () => {
  38. calls.push('job2')
  39. }
  40. const cb1 = () => {
  41. calls.push('cb1')
  42. }
  43. const cb2 = () => {
  44. calls.push('cb2')
  45. }
  46. queueJob(job1, cb1)
  47. queueJob(job2, cb2)
  48. await nextTick()
  49. expect(calls).toEqual(['job1', 'job2', 'cb1', 'cb2'])
  50. })
  51. it('queueJob w/ postFlushCb while flushing', async () => {
  52. const calls: any = []
  53. const job1 = () => {
  54. calls.push('job1')
  55. // job1 queues job2
  56. queueJob(job2, cb2)
  57. }
  58. const job2 = () => {
  59. calls.push('job2')
  60. }
  61. const cb1 = () => {
  62. calls.push('cb1')
  63. }
  64. const cb2 = () => {
  65. calls.push('cb2')
  66. }
  67. queueJob(job1, cb1)
  68. expect(calls).toEqual([])
  69. await nextTick()
  70. expect(calls).toEqual(['job1', 'job2', 'cb1', 'cb2'])
  71. })
  72. it('should dedupe queued tasks', async () => {
  73. const calls: any = []
  74. const job1 = () => {
  75. calls.push('job1')
  76. }
  77. const job2 = () => {
  78. calls.push('job2')
  79. }
  80. queueJob(job1)
  81. queueJob(job2)
  82. queueJob(job1)
  83. queueJob(job2)
  84. expect(calls).toEqual([])
  85. await nextTick()
  86. expect(calls).toEqual(['job1', 'job2'])
  87. })
  88. })