misc_spec.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // test cases for edge cases & bug fixes
  2. var Vue = require('../../../src/vue')
  3. describe('Misc', function () {
  4. it('should handle directive.bind() altering its childNode structure', function () {
  5. var vm = new Vue({
  6. el: document.createElement('div'),
  7. template: '<div v-test>{{test}}</div>',
  8. data: {
  9. test: 'hi'
  10. },
  11. directives: {
  12. test: {
  13. bind: function () {
  14. this.el.insertBefore(document.createTextNode('yo '),
  15. this.el.firstChild)
  16. }
  17. }
  18. }
  19. })
  20. expect(vm.$el.textContent).toBe('yo hi')
  21. })
  22. it('attached/detached hooks for transcluded components', function () {
  23. var spy1 = jasmine.createSpy('attached')
  24. var spy2 = jasmine.createSpy('detached')
  25. var el = document.createElement('div')
  26. el.innerHTML = '<div v-component="outter" v-ref="outter"><div v-component="inner"></div></div>'
  27. document.body.appendChild(el)
  28. var vm = new Vue({
  29. el: el,
  30. components: {
  31. outter: {
  32. template: '<content></content>'
  33. },
  34. inner: {
  35. template: 'hi',
  36. attached: spy1,
  37. detached: spy2
  38. }
  39. }
  40. })
  41. expect(spy1).toHaveBeenCalled()
  42. vm.$.outter.$remove()
  43. expect(spy2).toHaveBeenCalled()
  44. })
  45. it('v-repeat on component root node with replace:true', function () {
  46. var el = document.createElement('div')
  47. var vm = new Vue({
  48. el: el,
  49. template: '<div v-component="test"></div>',
  50. components: {
  51. test: {
  52. data: function () {
  53. return { list: [1, 2, 3] }
  54. },
  55. template: '<div v-repeat="list">{{$value}}</div>',
  56. replace: true
  57. }
  58. }
  59. })
  60. expect(vm.$el.innerHTML).toBe(
  61. '<!--v-start-->' +
  62. '<div>1</div><div>2</div><div>3</div><!--v-repeat-->' +
  63. '<!--v-end--><!--v-component-->'
  64. )
  65. })
  66. })