methods-events.spec.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import Vue from 'vue'
  2. describe('Instance methods events', () => {
  3. let vm, spy
  4. beforeEach(() => {
  5. vm = new Vue({})
  6. spy = vi.fn()
  7. })
  8. it('$on', () => {
  9. vm.$on('test', function () {
  10. // expect correct context
  11. expect(this).toBe(vm)
  12. spy.apply(this, arguments)
  13. })
  14. vm.$emit('test', 1, 2, 3, 4)
  15. expect(spy.mock.calls.length).toBe(1)
  16. expect(spy).toHaveBeenCalledWith(1, 2, 3, 4)
  17. })
  18. it('$on multi event', () => {
  19. vm.$on(['test1', 'test2'], function () {
  20. expect(this).toBe(vm)
  21. spy.apply(this, arguments)
  22. })
  23. vm.$emit('test1', 1, 2, 3, 4)
  24. expect(spy.mock.calls.length).toBe(1)
  25. expect(spy).toHaveBeenCalledWith(1, 2, 3, 4)
  26. vm.$emit('test2', 5, 6, 7, 8)
  27. expect(spy.mock.calls.length).toBe(2)
  28. expect(spy).toHaveBeenCalledWith(5, 6, 7, 8)
  29. })
  30. it('$off multi event', () => {
  31. vm.$on(['test1', 'test2', 'test3'], spy)
  32. vm.$off(['test1', 'test2'], spy)
  33. vm.$emit('test1')
  34. vm.$emit('test2')
  35. expect(spy).not.toHaveBeenCalled()
  36. vm.$emit('test3', 1, 2, 3, 4)
  37. expect(spy.mock.calls.length).toBe(1)
  38. })
  39. it('$off multi event without callback', () => {
  40. vm.$on(['test1', 'test2'], spy)
  41. vm.$off(['test1', 'test2'])
  42. vm.$emit('test1')
  43. expect(spy).not.toHaveBeenCalled()
  44. })
  45. it('$once', () => {
  46. vm.$once('test', spy)
  47. vm.$emit('test', 1, 2, 3)
  48. vm.$emit('test', 2, 3, 4)
  49. expect(spy.mock.calls.length).toBe(1)
  50. expect(spy).toHaveBeenCalledWith(1, 2, 3)
  51. })
  52. it('$off event added by $once', () => {
  53. vm.$once('test', spy)
  54. vm.$off('test', spy) // test off event and this event added by once
  55. vm.$emit('test', 1, 2, 3)
  56. expect(spy).not.toHaveBeenCalled()
  57. })
  58. it('$off', () => {
  59. vm.$on('test1', spy)
  60. vm.$on('test2', spy)
  61. vm.$off()
  62. vm.$emit('test1')
  63. vm.$emit('test2')
  64. expect(spy).not.toHaveBeenCalled()
  65. })
  66. it('$off event', () => {
  67. vm.$on('test1', spy)
  68. vm.$on('test2', spy)
  69. vm.$off('test1')
  70. vm.$off('test1') // test off something that's already off
  71. vm.$emit('test1', 1)
  72. vm.$emit('test2', 2)
  73. expect(spy.mock.calls.length).toBe(1)
  74. expect(spy).toHaveBeenCalledWith(2)
  75. })
  76. it('$off event + fn', () => {
  77. const spy2 = vi.fn()
  78. vm.$on('test', spy)
  79. vm.$on('test', spy2)
  80. vm.$off('test', spy)
  81. vm.$emit('test', 1, 2, 3)
  82. expect(spy).not.toHaveBeenCalled()
  83. expect(spy2.mock.calls.length).toBe(1)
  84. expect(spy2).toHaveBeenCalledWith(1, 2, 3)
  85. })
  86. })