if.spec.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. }).then(done)
  48. })
  49. it('should work well with v-else', done => {
  50. const vm = new Vue({
  51. template: `
  52. <div>
  53. <span v-if="foo">hello</span>
  54. <span v-else>bye</span>
  55. </div>
  56. `,
  57. data: { foo: true }
  58. }).$mount()
  59. expect(vm.$el.innerHTML.trim()).toBe('<span>hello</span>')
  60. vm.foo = false
  61. waitForUpdate(() => {
  62. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span>')
  63. vm.foo = {}
  64. }).then(() => {
  65. expect(vm.$el.innerHTML.trim()).toBe('<span>hello</span>')
  66. vm.foo = 0
  67. }).then(() => {
  68. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span>')
  69. vm.foo = []
  70. }).then(() => {
  71. expect(vm.$el.innerHTML.trim()).toBe('<span>hello</span>')
  72. vm.foo = null
  73. }).then(() => {
  74. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span>')
  75. vm.foo = '0'
  76. }).then(() => {
  77. expect(vm.$el.innerHTML.trim()).toBe('<span>hello</span>')
  78. vm.foo = undefined
  79. }).then(() => {
  80. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span>')
  81. vm.foo = 1
  82. }).then(() => {
  83. expect(vm.$el.innerHTML.trim()).toBe('<span>hello</span>')
  84. }).then(done)
  85. })
  86. it('should work well with v-for', done => {
  87. const vm = new Vue({
  88. template: `
  89. <div>
  90. <span v-for="item,i in list" v-if="item.value">{{i}}</span>
  91. </div>
  92. `,
  93. data: {
  94. list: [
  95. { value: true },
  96. { value: false },
  97. { value: true }
  98. ]
  99. }
  100. }).$mount()
  101. expect(vm.$el.innerHTML).toBe('<span>0</span><span>2</span>')
  102. vm.list[0].value = false
  103. waitForUpdate(() => {
  104. expect(vm.$el.innerHTML).toBe('<span>2</span>')
  105. vm.list.push({ value: true })
  106. }).then(() => {
  107. expect(vm.$el.innerHTML).toBe('<span>2</span><span>3</span>')
  108. vm.list.splice(1, 2)
  109. }).then(() => {
  110. expect(vm.$el.innerHTML).toBe('<span>1</span>')
  111. }).then(done)
  112. })
  113. it('should work well with v-for and v-else', done => {
  114. const vm = new Vue({
  115. template: `
  116. <div>
  117. <span v-for="item,i in list" v-if="item.value">hello</span>
  118. <span v-else>bye</span>
  119. </div>
  120. `,
  121. data: {
  122. list: [
  123. { value: true },
  124. { value: false },
  125. { value: true }
  126. ]
  127. }
  128. }).$mount()
  129. expect(vm.$el.innerHTML.trim()).toBe('<span>hello</span><span>bye</span><span>hello</span>')
  130. vm.list[0].value = false
  131. waitForUpdate(() => {
  132. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span><span>bye</span><span>hello</span>')
  133. vm.list.push({ value: true })
  134. }).then(() => {
  135. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span><span>bye</span><span>hello</span><span>hello</span>')
  136. vm.list.splice(1, 2)
  137. }).then(() => {
  138. expect(vm.$el.innerHTML.trim()).toBe('<span>bye</span><span>hello</span>')
  139. }).then(done)
  140. })
  141. })