global-observer-api.spec.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import Vue from 'vue'
  2. describe('Global Data Observer API', () => {
  3. describe('Vue.set', () => {
  4. it('should update a vue object', done => {
  5. const vm = new Vue({
  6. el: document.createElement('div'),
  7. template: '<div>{{x}}</div>',
  8. data: { x: 1 }
  9. })
  10. expect(vm.$el.innerHTML).toBe('1')
  11. Vue.set(vm, 'x', 2)
  12. waitForUpdate(() => {
  13. expect(vm.$el.innerHTML).toBe('2')
  14. done()
  15. }).catch(done)
  16. })
  17. it('should update a observing object', done => {
  18. const vm = new Vue({
  19. el: document.createElement('div'),
  20. template: '<div>{{foo.x}}</div>',
  21. data: { foo: { x: 1 }}
  22. })
  23. expect(vm.$el.innerHTML).toBe('1')
  24. Vue.set(vm.foo, 'x', 2)
  25. waitForUpdate(() => {
  26. expect(vm.$el.innerHTML).toBe('2')
  27. done()
  28. }).catch(done)
  29. })
  30. it('should update a observing array', done => {
  31. const vm = new Vue({
  32. el: document.createElement('div'),
  33. template: '<div><div v-for="v,k in list">{{k}}-{{v}}</div></div>',
  34. data: { list: ['a', 'b', 'c'] }
  35. })
  36. expect(vm.$el.innerHTML).toBe('<div>0-a</div><div>1-b</div><div>2-c</div>')
  37. Vue.set(vm.list, 1, 'd')
  38. waitForUpdate(() => {
  39. expect(vm.$el.innerHTML).toBe('<div>0-a</div><div>1-d</div><div>2-c</div>')
  40. done()
  41. }).catch(done)
  42. })
  43. it('should update a vue object with nothing', done => {
  44. const vm = new Vue({
  45. el: document.createElement('div'),
  46. template: '<div>{{x}}</div>',
  47. data: { x: 1 }
  48. })
  49. expect(vm.$el.innerHTML).toBe('1')
  50. Vue.set(vm, 'x', null)
  51. waitForUpdate(() => {
  52. expect(vm.$el.innerHTML).toBe('')
  53. Vue.set(vm, 'x')
  54. }).then(() => {
  55. expect(vm.$el.innerHTML).toBe('')
  56. done()
  57. }).catch(done)
  58. })
  59. })
  60. describe('Vue.delete', () => {
  61. it('should delete a key', done => {
  62. const vm = new Vue({
  63. el: document.createElement('div'),
  64. template: '<div>{{obj.x}}</div>',
  65. data: { obj: { x: 1 }}
  66. })
  67. expect(vm.$el.innerHTML).toBe('1')
  68. vm.obj.x = 2
  69. waitForUpdate(() => {
  70. expect(vm.$el.innerHTML).toBe('2')
  71. Vue.delete(vm.obj, 'x')
  72. }).then(() => {
  73. expect(vm.$el.innerHTML).toBe('')
  74. vm.obj.x = 3
  75. }).then(() => {
  76. expect(vm.$el.innerHTML).toBe('')
  77. done()
  78. }).catch(done)
  79. })
  80. })
  81. })