partial_spec.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. var Vue = require('../../../../src/vue')
  2. var _ = require('../../../../src/util')
  3. var compiler = require('../../../../src/compiler')
  4. describe('Partial', function () {
  5. var el
  6. beforeEach(function () {
  7. el = document.createElement('div')
  8. })
  9. it('static', function (done) {
  10. var vm = new Vue({
  11. el: el,
  12. template: '<partial name="yo"></partial>',
  13. data: {
  14. msg: 'hello'
  15. },
  16. partials: {
  17. yo: '{{msg}}'
  18. }
  19. })
  20. expect(el.textContent).toBe('hello')
  21. vm.msg = 'what'
  22. _.nextTick(function () {
  23. expect(el.textContent).toBe('what')
  24. done()
  25. })
  26. })
  27. it('dynamic', function (done) {
  28. var vm = new Vue({
  29. el: el,
  30. template: '<partial name="test-{{id}}"></partial>',
  31. data: {
  32. id: 'a'
  33. },
  34. partials: {
  35. 'test-a': 'a {{id}}',
  36. 'test-b': 'b {{id}}'
  37. }
  38. })
  39. expect(el.textContent).toBe('a a')
  40. vm.id = 'b'
  41. _.nextTick(function () {
  42. expect(el.textContent).toBe('b b')
  43. done()
  44. })
  45. })
  46. it('caching', function () {
  47. var calls = 0
  48. var compile = compiler.compile
  49. compiler.compile = function () {
  50. calls++
  51. return compile.apply(this, arguments)
  52. }
  53. new Vue({
  54. el: el,
  55. template:
  56. '<partial name="cache-test"></partial> ' +
  57. '<partial name="cache-test"></partial>',
  58. data: {
  59. msg: 'hi'
  60. },
  61. partials: {
  62. 'cache-test': 'cache-test {{msg}}'
  63. }
  64. })
  65. expect(el.textContent).toBe('cache-test hi cache-test hi')
  66. // one call for instance, and one for partial
  67. expect(calls).toBe(2)
  68. // cleanup
  69. compiler.compile = compile
  70. })
  71. it('teardown', function () {
  72. var vm = new Vue({
  73. el: el,
  74. template: '<partial name="test-{{id}}"></partial>',
  75. data: {
  76. id: 'a'
  77. },
  78. partials: {
  79. 'test-a': 'a {{id}}'
  80. }
  81. })
  82. expect(vm._directives.length).toBe(2)
  83. expect(vm._directives[1].name).toBe('partial')
  84. expect(vm._watchers.length).toBe(2)
  85. vm._directives[1]._teardown()
  86. // the text-directive should've been removed.
  87. expect(vm._directives.length).toBe(1)
  88. expect(vm._directives[0].name).toBe('partial')
  89. expect(vm._watchers.length).toBe(0)
  90. })
  91. })