if_spec.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var _ = require('../../../../src/util')
  2. var Vue = require('../../../../src/vue')
  3. if (_.inBrowser) {
  4. describe('v-if', function () {
  5. var el
  6. beforeEach(function () {
  7. el = document.createElement('div')
  8. spyOn(_, 'warn')
  9. })
  10. it('normal', function (done) {
  11. var vm = new Vue({
  12. el: el,
  13. data: { test: false, a: 'A' },
  14. template: '<div v-if="test">{{a}}</div>'
  15. })
  16. // lazy instantitation
  17. expect(el.innerHTML).toBe('<!--v-if-->')
  18. expect(vm._children).toBeNull()
  19. vm.test = true
  20. _.nextTick(function () {
  21. expect(el.innerHTML).toBe('<div>A</div><!--v-if-->')
  22. expect(vm._children.length).toBe(1)
  23. vm.test = false
  24. _.nextTick(function () {
  25. expect(el.innerHTML).toBe('<!--v-if-->')
  26. expect(vm._children.length).toBe(1)
  27. var child = vm._children[0]
  28. vm.test = true
  29. _.nextTick(function () {
  30. expect(el.innerHTML).toBe('<div>A</div><!--v-if-->')
  31. expect(vm._children.length).toBe(1)
  32. vm.$destroy()
  33. expect(child._isDestroyed).toBe(true)
  34. done()
  35. })
  36. })
  37. })
  38. })
  39. it('template block', function (done) {
  40. var vm = new Vue({
  41. el: el,
  42. data: { test: false, a: 'A', b: 'B' },
  43. template: '<template v-if="test"><p>{{a}}</p><p>{{b}}</p></template>'
  44. })
  45. // lazy instantitation
  46. expect(el.innerHTML).toBe('<!--v-if-->')
  47. expect(vm._children).toBeNull()
  48. vm.test = true
  49. _.nextTick(function () {
  50. expect(el.innerHTML).toBe('<p>A</p><p>B</p><!--v-if-->')
  51. expect(vm._children.length).toBe(1)
  52. vm.test = false
  53. _.nextTick(function () {
  54. expect(el.innerHTML).toBe('<!--v-if-->')
  55. expect(vm._children.length).toBe(1)
  56. done()
  57. })
  58. })
  59. })
  60. it('invalid warn', function () {
  61. el.setAttribute('v-if', 'test')
  62. var vm = new Vue({
  63. el: el
  64. })
  65. expect(_.warn).toHaveBeenCalled()
  66. })
  67. })
  68. }