transition_spec.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. var _ = require('src/util')
  2. var Vue = require('src')
  3. var Directive = require('src/directive')
  4. var def = require('src/directives/internal/transition')
  5. describe('transition', function () {
  6. it('should instantiate a transition object with correct args', function () {
  7. var fns = {}
  8. var el = document.createElement('div')
  9. var vm = new Vue({
  10. transitions: {
  11. test: fns
  12. }
  13. })
  14. var dir = new Directive({
  15. name: 'transition',
  16. raw: '',
  17. def: def,
  18. modifiers: {
  19. literal: true
  20. }
  21. }, vm, el)
  22. dir._bind()
  23. var transition = dir.el.__v_trans
  24. expect(transition.enterClass).toBe('v-enter')
  25. expect(transition.leaveClass).toBe('v-leave')
  26. expect(dir.el.className).toBe('v-transition')
  27. dir.update('test', '')
  28. transition = dir.el.__v_trans
  29. expect(transition.el).toBe(dir.el)
  30. expect(transition.hooks).toBe(fns)
  31. expect(transition.enterClass).toBe('test-enter')
  32. expect(transition.leaveClass).toBe('test-leave')
  33. expect(dir.el.className).toBe('test-transition')
  34. dir.update('lol', 'test')
  35. transition = dir.el.__v_trans
  36. expect(transition.enterClass).toBe('lol-enter')
  37. expect(transition.leaveClass).toBe('lol-leave')
  38. expect(transition.fns).toBeUndefined()
  39. expect(dir.el.className).toBe('lol-transition')
  40. })
  41. it('dynamic transitions', function (done) {
  42. var el = document.createElement('div')
  43. document.body.appendChild(el)
  44. var calls = {
  45. a: { enter: 0, leave: 0 },
  46. b: { enter: 0, leave: 0 }
  47. }
  48. var vm = new Vue({
  49. el: el,
  50. template: '<div v-show="show" :transition="trans"></div>',
  51. data: {
  52. show: true,
  53. trans: 'a'
  54. },
  55. transitions: {
  56. a: {
  57. enter: function (el, done) {
  58. calls.a.enter++
  59. done()
  60. },
  61. leave: function (el, done) {
  62. calls.a.leave++
  63. done()
  64. }
  65. },
  66. b: {
  67. enter: function (el, done) {
  68. calls.b.enter++
  69. done()
  70. },
  71. leave: function (el, done) {
  72. calls.b.leave++
  73. done()
  74. }
  75. }
  76. }
  77. })
  78. assertCalls(0, 0, 0, 0)
  79. vm.show = false
  80. _.nextTick(function () {
  81. assertCalls(0, 1, 0, 0)
  82. vm.trans = 'b'
  83. vm.show = true
  84. _.nextTick(function () {
  85. assertCalls(0, 1, 1, 0)
  86. vm.show = false
  87. _.nextTick(function () {
  88. assertCalls(0, 1, 1, 1)
  89. vm.trans = 'a'
  90. vm.show = true
  91. _.nextTick(function () {
  92. assertCalls(1, 1, 1, 1)
  93. done()
  94. })
  95. })
  96. })
  97. })
  98. function assertCalls (a, b, c, d) {
  99. expect(el.firstChild.style.display).toBe(vm.show ? '' : 'none')
  100. expect(calls.a.enter).toBe(a)
  101. expect(calls.a.leave).toBe(b)
  102. expect(calls.b.enter).toBe(c)
  103. expect(calls.b.leave).toBe(d)
  104. }
  105. })
  106. })