methods-data.spec.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. })
  16. .then(() => {
  17. expect(vm.$el.innerHTML).toBe('')
  18. })
  19. .then(done)
  20. })
  21. describe('$watch', () => {
  22. let vm, spy
  23. beforeEach(() => {
  24. spy = vi.fn()
  25. vm = new Vue({
  26. data: {
  27. a: {
  28. b: 1
  29. },
  30. 유니코드: {
  31. なまえ: 'ok'
  32. }
  33. },
  34. methods: {
  35. foo: spy
  36. }
  37. })
  38. })
  39. it('basic usage', done => {
  40. vm.$watch('a.b', spy)
  41. vm.a.b = 2
  42. waitForUpdate(() => {
  43. expect(spy.mock.calls.length).toBe(1)
  44. expect(spy).toHaveBeenCalledWith(2, 1)
  45. vm.a = { b: 3 }
  46. })
  47. .then(() => {
  48. expect(spy.mock.calls.length).toBe(2)
  49. expect(spy).toHaveBeenCalledWith(3, 2)
  50. })
  51. .then(done)
  52. })
  53. it('immediate', () => {
  54. vm.$watch('a.b', spy, { immediate: true })
  55. expect(spy.mock.calls.length).toBe(1)
  56. expect(spy).toHaveBeenCalledWith(1)
  57. })
  58. it('unwatch', done => {
  59. const unwatch = vm.$watch('a.b', spy)
  60. unwatch()
  61. vm.a.b = 2
  62. waitForUpdate(() => {
  63. expect(spy.mock.calls.length).toBe(0)
  64. }).then(done)
  65. })
  66. it('function watch', done => {
  67. vm.$watch(function () {
  68. return this.a.b
  69. }, spy)
  70. vm.a.b = 2
  71. waitForUpdate(() => {
  72. expect(spy).toHaveBeenCalledWith(2, 1)
  73. }).then(done)
  74. })
  75. it('deep watch', done => {
  76. const oldA = vm.a
  77. vm.$watch('a', spy, { deep: true })
  78. vm.a.b = 2
  79. waitForUpdate(() => {
  80. expect(spy).toHaveBeenCalledWith(oldA, oldA)
  81. vm.a = { b: 3 }
  82. })
  83. .then(() => {
  84. expect(spy).toHaveBeenCalledWith(vm.a, oldA)
  85. })
  86. .then(done)
  87. })
  88. it('handler option', done => {
  89. const oldA = vm.a
  90. vm.$watch('a', {
  91. handler: spy,
  92. deep: true
  93. })
  94. vm.a.b = 2
  95. waitForUpdate(() => {
  96. expect(spy).toHaveBeenCalledWith(oldA, oldA)
  97. vm.a = { b: 3 }
  98. })
  99. .then(() => {
  100. expect(spy).toHaveBeenCalledWith(vm.a, oldA)
  101. })
  102. .then(done)
  103. })
  104. it('handler option in string', () => {
  105. vm.$watch('a.b', {
  106. handler: 'foo',
  107. immediate: true
  108. })
  109. expect(spy.mock.calls.length).toBe(1)
  110. expect(spy).toHaveBeenCalledWith(1)
  111. })
  112. it('handler option in string', () => {
  113. vm.$watch('유니코드.なまえ', {
  114. handler: 'foo',
  115. immediate: true
  116. })
  117. expect(spy.mock.calls.length).toBe(1)
  118. expect(spy).toHaveBeenCalledWith('ok')
  119. })
  120. it('warn expression', () => {
  121. vm.$watch('a + b', spy)
  122. expect(
  123. 'Watcher only accepts simple dot-delimited paths'
  124. ).toHaveBeenWarned()
  125. })
  126. })
  127. })