partial_spec.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. var _ = require('../../../../src/util')
  2. var Vue = require('../../../../src/vue')
  3. if (_.inBrowser) {
  4. describe('v-partial', function () {
  5. var el
  6. beforeEach(function () {
  7. el = document.createElement('div')
  8. spyOn(_, 'warn')
  9. })
  10. function wrap (content) {
  11. return '<!--v-partial-start-->' + content + '<!--v-partial-end-->'
  12. }
  13. it('element', function () {
  14. var vm = new Vue({
  15. el: el,
  16. template: '<div v-partial="test"></div>',
  17. partials: {
  18. test: '<p>{{a}}</p><p>{{b}}</p>'
  19. },
  20. data: {
  21. a: 'A',
  22. b: 'B'
  23. }
  24. })
  25. expect(el.innerHTML).toBe('<div>' + wrap('<p>A</p><p>B</p>') + '</div>')
  26. })
  27. it('inline', function () {
  28. var vm = new Vue({
  29. el: el,
  30. template: '<div>{{>test}}</div>',
  31. partials: {
  32. test: '<p>{{a}}</p><p>{{b}}</p>'
  33. },
  34. data: {
  35. a: 'A',
  36. b: 'B'
  37. }
  38. })
  39. expect(el.innerHTML).toBe('<div>' + wrap('<p>A</p><p>B</p>') + '</div>')
  40. })
  41. it('not found', function () {
  42. var vm = new Vue({
  43. el: el,
  44. template: '<div>{{>test}}</div>'
  45. })
  46. expect(el.innerHTML).toBe('<div>' + wrap('') + '</div>')
  47. })
  48. it('dynamic partial', function (done) {
  49. var vm = new Vue({
  50. el: el,
  51. template: '<div v-partial="{{partial}}"></div>',
  52. data: {
  53. msg: 'hello',
  54. partial: 'p1'
  55. },
  56. partials: {
  57. p1: '{{msg}}',
  58. p2: '<div v-component="child"></div>'
  59. },
  60. components: {
  61. child: {
  62. data: function () {
  63. return {a:123}
  64. },
  65. template: '{{a}}'
  66. }
  67. }
  68. })
  69. expect(el.firstChild.innerHTML).toBe(wrap('hello'))
  70. expect(vm._directives.length).toBe(2)
  71. vm.partial = 'p2'
  72. _.nextTick(function () {
  73. expect(el.firstChild.innerHTML).toBe(wrap('<div>123</div><!--v-component-->'))
  74. expect(vm._directives.length).toBe(2)
  75. expect(vm._children.length).toBe(1)
  76. vm.partial = 'p1'
  77. _.nextTick(function () {
  78. expect(el.firstChild.innerHTML).toBe(wrap('hello'))
  79. expect(vm._directives.length).toBe(2)
  80. expect(vm._children.length).toBe(0)
  81. done()
  82. })
  83. })
  84. })
  85. it('template block partial', function (done) {
  86. var vm = new Vue({
  87. el: el,
  88. template: '<template v-partial="{{test}}"></template>',
  89. data: {
  90. test: 'p1',
  91. msg: 'b'
  92. },
  93. partials: {
  94. p1: 'a {{msg}} c',
  95. p2: '<span>1</span><a>2</a>'
  96. }
  97. })
  98. expect(el.innerHTML).toBe(wrap('a b c'))
  99. vm.test = 'p2'
  100. _.nextTick(function () {
  101. expect(el.innerHTML).toBe(wrap('<span>1</span><a>2</a>'))
  102. done()
  103. })
  104. })
  105. it('partial with filters', function () {
  106. var vm = new Vue({
  107. el: el,
  108. template: '<div>{{>test | replace}}</div>',
  109. partials: {
  110. test: '{{a}}'
  111. },
  112. data: {
  113. a: 'A',
  114. b: 'B'
  115. },
  116. filters: {
  117. replace: function () {
  118. return '{{b}}'
  119. }
  120. }
  121. })
  122. expect(el.innerHTML).toBe('<div>' + wrap('B') + '</div>')
  123. })
  124. })
  125. }