global-observer-api.spec.js 2.2 KB

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