data_spec.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. var Vue = require('src')
  2. var _ = require('src/util')
  3. var nextTick = _.nextTick
  4. describe('Data API', function () {
  5. var vm
  6. beforeEach(function () {
  7. vm = new Vue({
  8. data: {
  9. a: 1,
  10. b: {
  11. c: 2
  12. }
  13. },
  14. filters: {
  15. double: function (v) {
  16. return v * 2
  17. }
  18. },
  19. computed: {
  20. d: function () {
  21. return this.a + 1
  22. }
  23. }
  24. })
  25. })
  26. it('$get', function () {
  27. expect(vm.$get('a')).toBe(1)
  28. expect(vm.$get('b["c"]')).toBe(2)
  29. expect(vm.$get('a + b.c')).toBe(3)
  30. expect(vm.$get('c')).toBeUndefined()
  31. // invalid, should warn
  32. vm.$get('a(')
  33. expect('Invalid expression').toHaveBeenWarned()
  34. })
  35. it('$set', function () {
  36. vm.$set('a', 2)
  37. expect(vm.a).toBe(2)
  38. vm.$set('b["c"]', 3)
  39. expect(vm.b.c).toBe(3)
  40. // setting unexisting
  41. vm.$set('c.d', 2)
  42. expect(vm.c.d).toBe(2)
  43. // warn against setting unexisting
  44. expect('Consider pre-initializing').toHaveBeenWarned()
  45. })
  46. it('$set invalid', function () {
  47. vm.$set('c + d', 1)
  48. expect('Invalid setter expression').toHaveBeenWarned()
  49. })
  50. it('$delete', function () {
  51. vm._digest = jasmine.createSpy()
  52. vm.$delete('a')
  53. expect(_.hasOwn(vm, 'a')).toBe(false)
  54. expect(_.hasOwn(vm._data, 'a')).toBe(false)
  55. expect(vm._digest).toHaveBeenCalled()
  56. // reserved key should not be deleted
  57. vm.$delete('_data')
  58. expect(vm._data).toBeTruthy()
  59. })
  60. it('$watch', function (done) {
  61. var spy = jasmine.createSpy()
  62. // test immediate invoke
  63. var unwatch = vm.$watch('a + b.c', spy, {
  64. immediate: true
  65. })
  66. expect(spy).toHaveBeenCalledWith(3)
  67. vm.a = 2
  68. nextTick(function () {
  69. expect(spy).toHaveBeenCalledWith(4, 3)
  70. // unwatch
  71. unwatch()
  72. vm.a = 3
  73. nextTick(function () {
  74. expect(spy.calls.count()).toBe(2)
  75. done()
  76. })
  77. })
  78. })
  79. it('function $watch', function (done) {
  80. var spy = jasmine.createSpy()
  81. // test immediate invoke
  82. var unwatch = vm.$watch(function () {
  83. return this.a + this.b.c
  84. }, spy, { immediate: true })
  85. expect(spy).toHaveBeenCalledWith(3)
  86. vm.a = 2
  87. nextTick(function () {
  88. expect(spy).toHaveBeenCalledWith(4, 3)
  89. // unwatch
  90. unwatch()
  91. vm.a = 3
  92. nextTick(function () {
  93. expect(spy.calls.count()).toBe(2)
  94. done()
  95. })
  96. })
  97. })
  98. it('deep $watch', function (done) {
  99. var oldB = vm.b
  100. var spy = jasmine.createSpy()
  101. vm.$watch('b', spy, {
  102. deep: true
  103. })
  104. vm.b.c = 3
  105. nextTick(function () {
  106. expect(spy).toHaveBeenCalledWith(oldB, oldB)
  107. vm.b = { c: 4 }
  108. nextTick(function () {
  109. expect(spy).toHaveBeenCalledWith(vm.b, oldB)
  110. done()
  111. })
  112. })
  113. })
  114. it('$watch with filters', function (done) {
  115. var spy = jasmine.createSpy()
  116. vm.$watch('a | double', spy)
  117. vm.a = 2
  118. nextTick(function () {
  119. expect(spy).toHaveBeenCalledWith(4, 2)
  120. done()
  121. })
  122. })
  123. it('$eval', function () {
  124. expect(vm.$eval('a')).toBe(1)
  125. expect(vm.$eval('b.c')).toBe(2)
  126. expect(vm.$eval('a + b.c | double')).toBe(6)
  127. })
  128. it('$interpolate', function () {
  129. expect(vm.$interpolate('abc')).toBe('abc')
  130. expect(vm.$interpolate('{{a}}')).toBe('1')
  131. expect(vm.$interpolate('{{a}} and {{a + b.c | double}}')).toBe('1 and 6')
  132. })
  133. if (typeof console !== 'undefined') {
  134. it('$log', function () {
  135. var oldLog = console.log
  136. var spy = jasmine.createSpy()
  137. console.log = function (val) {
  138. expect(val.a).toBe(1)
  139. expect(val.b.c).toBe(2)
  140. expect(val.d).toBe(2)
  141. spy()
  142. }
  143. vm.$log()
  144. expect(spy.calls.count()).toBe(1)
  145. console.log = function (val) {
  146. expect(val.c).toBe(2)
  147. spy()
  148. }
  149. vm.$log('b')
  150. expect(spy.calls.count()).toBe(2)
  151. console.log = oldLog
  152. })
  153. }
  154. })