methods-data.spec.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import Vue from 'vue'
  2. describe('Instance methods data', () => {
  3. it('$set/$delete', done => {
  4. const vm = new Vue({
  5. template: '<div>{{ a.msg }}</div>',
  6. data: {
  7. a: {}
  8. }
  9. }).$mount()
  10. expect(vm.$el.innerHTML).toBe('')
  11. vm.$set(vm.a, 'msg', 'hello')
  12. waitForUpdate(() => {
  13. expect(vm.$el.innerHTML).toBe('hello')
  14. vm.$delete(vm.a, 'msg')
  15. }).then(() => {
  16. expect(vm.$el.innerHTML).toBe('')
  17. }).then(done)
  18. })
  19. describe('$watch', () => {
  20. let vm, spy
  21. beforeEach(() => {
  22. spy = jasmine.createSpy('watch')
  23. vm = new Vue({
  24. data: {
  25. a: {
  26. b: 1
  27. }
  28. },
  29. methods: {
  30. foo: spy
  31. }
  32. })
  33. })
  34. it('basic usage', done => {
  35. vm.$watch('a.b', spy)
  36. vm.a.b = 2
  37. waitForUpdate(() => {
  38. expect(spy.calls.count()).toBe(1)
  39. expect(spy).toHaveBeenCalledWith(2, 1)
  40. vm.a = { b: 3 }
  41. }).then(() => {
  42. expect(spy.calls.count()).toBe(2)
  43. expect(spy).toHaveBeenCalledWith(3, 2)
  44. }).then(done)
  45. })
  46. it('immediate', () => {
  47. vm.$watch('a.b', spy, { immediate: true })
  48. expect(spy.calls.count()).toBe(1)
  49. expect(spy).toHaveBeenCalledWith(1)
  50. })
  51. it('unwatch', done => {
  52. const unwatch = vm.$watch('a.b', spy)
  53. unwatch()
  54. vm.a.b = 2
  55. waitForUpdate(() => {
  56. expect(spy.calls.count()).toBe(0)
  57. }).then(done)
  58. })
  59. it('function watch', done => {
  60. vm.$watch(function () {
  61. return this.a.b
  62. }, spy)
  63. vm.a.b = 2
  64. waitForUpdate(() => {
  65. expect(spy).toHaveBeenCalledWith(2, 1)
  66. }).then(done)
  67. })
  68. it('deep watch', done => {
  69. var oldA = vm.a
  70. vm.$watch('a', spy, { deep: true })
  71. vm.a.b = 2
  72. waitForUpdate(() => {
  73. expect(spy).toHaveBeenCalledWith(oldA, oldA)
  74. vm.a = { b: 3 }
  75. }).then(() => {
  76. expect(spy).toHaveBeenCalledWith(vm.a, oldA)
  77. }).then(done)
  78. })
  79. it('handler option', done => {
  80. var oldA = vm.a
  81. vm.$watch('a', {
  82. handler: spy,
  83. deep: true
  84. })
  85. vm.a.b = 2
  86. waitForUpdate(() => {
  87. expect(spy).toHaveBeenCalledWith(oldA, oldA)
  88. vm.a = { b: 3 }
  89. }).then(() => {
  90. expect(spy).toHaveBeenCalledWith(vm.a, oldA)
  91. }).then(done)
  92. })
  93. it('handler option in string', () => {
  94. vm.$watch('a.b', {
  95. handler: 'foo',
  96. immediate: true
  97. })
  98. expect(spy.calls.count()).toBe(1)
  99. expect(spy).toHaveBeenCalledWith(1)
  100. })
  101. it('warn expresssion', () => {
  102. vm.$watch('a + b', spy)
  103. expect('Watcher only accepts simple dot-delimited paths').toHaveBeenWarned()
  104. })
  105. })
  106. })