if.spec.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import Vue from 'vue'
  2. describe('Directive v-if', () => {
  3. it('should check if value is truthy', () => {
  4. const vm = new Vue({
  5. template: '<div><span v-if="foo">hello</span></div>',
  6. data: { foo: true }
  7. }).$mount()
  8. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  9. })
  10. it('should check if value is falsy', () => {
  11. const vm = new Vue({
  12. template: '<div><span v-if="foo">hello</span></div>',
  13. data: { foo: false }
  14. }).$mount()
  15. expect(vm.$el.innerHTML).toBe('')
  16. })
  17. it('should update if value changed', done => {
  18. const vm = new Vue({
  19. template: '<div><span v-if="foo">hello</span></div>',
  20. data: { foo: true }
  21. }).$mount()
  22. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  23. vm.foo = false
  24. waitForUpdate(() => {
  25. expect(vm.$el.innerHTML).toBe('')
  26. vm.foo = {}
  27. }).then(() => {
  28. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  29. vm.foo = 0
  30. }).then(() => {
  31. expect(vm.$el.innerHTML).toBe('')
  32. vm.foo = []
  33. }).then(() => {
  34. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  35. vm.foo = null
  36. }).then(() => {
  37. expect(vm.$el.innerHTML).toBe('')
  38. vm.foo = '0'
  39. }).then(() => {
  40. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  41. vm.foo = undefined
  42. }).then(() => {
  43. expect(vm.$el.innerHTML).toBe('')
  44. vm.foo = 1
  45. }).then(() => {
  46. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  47. done()
  48. })
  49. .catch(done)
  50. })
  51. it('should work well with v-else', done => {
  52. const vm = new Vue({
  53. template: `
  54. <div>
  55. <span v-if="foo">hello</span>
  56. <span v-else>bye</span>
  57. </div>
  58. `,
  59. data: { foo: true }
  60. }).$mount()
  61. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  62. vm.foo = false
  63. waitForUpdate(() => {
  64. expect(vm.$el.innerHTML).toBe('<span>bye</span>')
  65. vm.foo = {}
  66. }).then(() => {
  67. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  68. vm.foo = 0
  69. }).then(() => {
  70. expect(vm.$el.innerHTML).toBe('<span>bye</span>')
  71. vm.foo = []
  72. }).then(() => {
  73. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  74. vm.foo = null
  75. }).then(() => {
  76. expect(vm.$el.innerHTML).toBe('<span>bye</span>')
  77. vm.foo = '0'
  78. }).then(() => {
  79. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  80. vm.foo = undefined
  81. }).then(() => {
  82. expect(vm.$el.innerHTML).toBe('<span>bye</span>')
  83. vm.foo = 1
  84. }).then(() => {
  85. expect(vm.$el.innerHTML).toBe('<span>hello</span>')
  86. done()
  87. }).catch(done)
  88. })
  89. it('should work well with v-for', done => {
  90. const vm = new Vue({
  91. template: `
  92. <div>
  93. <span v-for="item,i in list" v-if="item.value">{{i}}</span>
  94. </div>
  95. `,
  96. data: {
  97. list: [
  98. { value: true },
  99. { value: false },
  100. { value: true }
  101. ]
  102. }
  103. }).$mount()
  104. expect(vm.$el.innerHTML).toBe('<span>0</span><span>2</span>')
  105. vm.list[0].value = false
  106. waitForUpdate(() => {
  107. expect(vm.$el.innerHTML).toBe('<span>2</span>')
  108. vm.list.push({ value: true })
  109. }).then(() => {
  110. expect(vm.$el.innerHTML).toBe('<span>2</span><span>3</span>')
  111. vm.list.splice(1, 2)
  112. }).then(() => {
  113. expect(vm.$el.innerHTML).toBe('<span>1</span>')
  114. done()
  115. }).catch(done)
  116. })
  117. it('should work well with v-for and v-else', done => {
  118. const vm = new Vue({
  119. template: `
  120. <div>
  121. <span v-for="item,i in list" v-if="item.value">hello</span>
  122. <span v-else>bye</span>
  123. </div>
  124. `,
  125. data: {
  126. list: [
  127. { value: true },
  128. { value: false },
  129. { value: true }
  130. ]
  131. }
  132. }).$mount()
  133. expect(vm.$el.innerHTML).toBe('<span>hello</span><span>bye</span><span>hello</span>')
  134. vm.list[0].value = false
  135. waitForUpdate(() => {
  136. expect(vm.$el.innerHTML).toBe('<span>bye</span><span>bye</span><span>hello</span>')
  137. vm.list.push({ value: true })
  138. }).then(() => {
  139. expect(vm.$el.innerHTML).toBe('<span>bye</span><span>bye</span><span>hello</span><span>hello</span>')
  140. vm.list.splice(1, 2)
  141. }).then(() => {
  142. expect(vm.$el.innerHTML).toBe('<span>bye</span><span>hello</span>')
  143. done()
  144. }).catch(done)
  145. })
  146. })