set-delete.spec.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import Vue from 'vue'
  2. describe('Global API: set/delete', () => {
  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. }).then(done)
  14. })
  15. it('should update a observing object', done => {
  16. const vm = new Vue({
  17. template: '<div>{{foo.x}}</div>',
  18. data: { foo: { x: 1 }}
  19. }).$mount()
  20. expect(vm.$el.innerHTML).toBe('1')
  21. Vue.set(vm.foo, 'x', 2)
  22. waitForUpdate(() => {
  23. expect(vm.$el.innerHTML).toBe('2')
  24. }).then(done)
  25. })
  26. it('should update a observing array', done => {
  27. const vm = new Vue({
  28. template: '<div><div v-for="v,k in list">{{k}}-{{v}}</div></div>',
  29. data: { list: ['a', 'b', 'c'] }
  30. }).$mount()
  31. expect(vm.$el.innerHTML).toBe('<div>0-a</div><div>1-b</div><div>2-c</div>')
  32. Vue.set(vm.list, 1, 'd')
  33. waitForUpdate(() => {
  34. expect(vm.$el.innerHTML).toBe('<div>0-a</div><div>1-d</div><div>2-c</div>')
  35. }).then(done)
  36. })
  37. it('should update a vue object with nothing', done => {
  38. const vm = new Vue({
  39. template: '<div>{{x}}</div>',
  40. data: { x: 1 }
  41. }).$mount()
  42. expect(vm.$el.innerHTML).toBe('1')
  43. Vue.set(vm, 'x', null)
  44. waitForUpdate(() => {
  45. expect(vm.$el.innerHTML).toBe('')
  46. Vue.set(vm, 'x')
  47. }).then(() => {
  48. expect(vm.$el.innerHTML).toBe('')
  49. }).then(done)
  50. })
  51. })
  52. describe('Vue.delete', () => {
  53. it('should delete a key', done => {
  54. const vm = new Vue({
  55. template: '<div>{{obj.x}}</div>',
  56. data: { obj: { x: 1 }}
  57. }).$mount()
  58. expect(vm.$el.innerHTML).toBe('1')
  59. vm.obj.x = 2
  60. waitForUpdate(() => {
  61. expect(vm.$el.innerHTML).toBe('2')
  62. Vue.delete(vm.obj, 'x')
  63. }).then(() => {
  64. expect(vm.$el.innerHTML).toBe('')
  65. vm.obj.x = 3
  66. }).then(() => {
  67. expect(vm.$el.innerHTML).toBe('')
  68. }).then(done)
  69. })
  70. it('be able to delete an item in array', done => {
  71. const vm = new Vue({
  72. template: '<div><p v-for="obj in lists">{{obj.name}}</p></div>',
  73. data: {
  74. lists: [
  75. { name: 'A' },
  76. { name: 'B' },
  77. { name: 'C' }
  78. ]
  79. }
  80. }).$mount()
  81. expect(vm.$el.innerHTML).toBe('<p>A</p><p>B</p><p>C</p>')
  82. Vue.delete(vm.lists, 1)
  83. waitForUpdate(() => {
  84. expect(vm.$el.innerHTML).toBe('<p>A</p><p>C</p>')
  85. Vue.delete(vm.lists, 1)
  86. }).then(() => {
  87. expect(vm.$el.innerHTML).toBe('<p>A</p>')
  88. Vue.delete(vm.lists, 0)
  89. }).then(() => {
  90. expect(vm.$el.innerHTML).toBe('')
  91. }).then(done)
  92. })
  93. })
  94. })