methods-events.spec.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import Vue from 'vue'
  2. describe('Instance methods events', () => {
  3. let vm, spy
  4. beforeEach(() => {
  5. vm = new Vue()
  6. spy = jasmine.createSpy('emitter')
  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.calls.count()).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.calls.count()).toBe(1)
  25. expect(spy).toHaveBeenCalledWith(1, 2, 3, 4)
  26. vm.$emit('test2', 5, 6, 7, 8)
  27. expect(spy.calls.count()).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.calls.count()).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.calls.count()).toBe(1)
  50. expect(spy).toHaveBeenCalledWith(1, 2, 3)
  51. })
  52. it('$off', () => {
  53. vm.$on('test1', spy)
  54. vm.$on('test2', spy)
  55. vm.$off()
  56. vm.$emit('test1')
  57. vm.$emit('test2')
  58. expect(spy).not.toHaveBeenCalled()
  59. })
  60. it('$off event', () => {
  61. vm.$on('test1', spy)
  62. vm.$on('test2', spy)
  63. vm.$off('test1')
  64. vm.$off('test1') // test off something that's already off
  65. vm.$emit('test1', 1)
  66. vm.$emit('test2', 2)
  67. expect(spy.calls.count()).toBe(1)
  68. expect(spy).toHaveBeenCalledWith(2)
  69. })
  70. it('$off event + fn', () => {
  71. var spy2 = jasmine.createSpy('emitter')
  72. vm.$on('test', spy)
  73. vm.$on('test', spy2)
  74. vm.$off('test', spy)
  75. vm.$emit('test', 1, 2, 3)
  76. expect(spy).not.toHaveBeenCalled()
  77. expect(spy2.calls.count()).toBe(1)
  78. expect(spy2).toHaveBeenCalledWith(1, 2, 3)
  79. })
  80. })