methods-data.spec.js 3.0 KB

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