util.vue-popper.spec.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import VuePopper from 'element-ui/src/utils/vue-popper';
  2. import { createTest } from '../util';
  3. const Popper = Object.assign({}, VuePopper, {
  4. render(h) {
  5. return h('div');
  6. },
  7. created() {
  8. this.popperElm = document.createElement('div');
  9. this.referenceElm = document.createElement('div');
  10. }
  11. });
  12. const CleanPopper = Object.assign({}, VuePopper, {
  13. render(h) {
  14. return h('div');
  15. }
  16. });
  17. describe('Utils:VuePopper', () => {
  18. it('set popper not reference', () => {
  19. const vm = createTest(CleanPopper, {
  20. popper: document.createElement('div')
  21. });
  22. vm.createPopper();
  23. expect(vm.popperElm).to.exist;
  24. expect(vm.referenceElm).to.not.exist;
  25. expect(vm.popperJS).to.not.exist;
  26. });
  27. it('set reference not popper', () => {
  28. const vm = createTest(CleanPopper, {
  29. reference: document.createElement('div')
  30. });
  31. vm.createPopper();
  32. expect(vm.referenceElm).to.exist;
  33. expect(vm.popperElm).to.not.exist;
  34. expect(vm.popperJS).to.not.exist;
  35. });
  36. it('set reference by slot', () => {
  37. const vm = createTest(CleanPopper);
  38. vm.$slots['reference'] = [{
  39. elm: document.createElement('div')
  40. }];
  41. vm.createPopper();
  42. expect(vm.referenceElm).to.exist;
  43. expect(vm.popperElm).to.not.exist;
  44. expect(vm.popperJS).to.not.exist;
  45. });
  46. it('createPopper', () => {
  47. const vm = createTest(Popper, { placement: 'top' });
  48. vm.createPopper();
  49. expect(vm.popperJS._popper.getAttribute('x-placement')).to.equal('top');
  50. });
  51. it('destroy popper when calling createPopper twice', () => {
  52. const vm = createTest(Popper);
  53. vm.createPopper();
  54. const popperJS = vm.popperJS;
  55. expect(vm.popperJS).to.exist;
  56. expect(vm.popperJS).to.equal(popperJS);
  57. vm.createPopper();
  58. expect(vm.popperJS).to.not.equal(popperJS);
  59. });
  60. it('updatePopper', () => {
  61. const vm = createTest(Popper);
  62. vm.updatePopper();
  63. const popperJS = vm.popperJS;
  64. expect(vm.popperJS).to.exist;
  65. vm.updatePopper();
  66. expect(vm.popperJS).to.equal(popperJS);
  67. });
  68. it('doDestroy', () => {
  69. const vm = createTest(Popper, { placement: 'top' });
  70. vm.createPopper();
  71. expect(vm.popperJS._popper.getAttribute('x-placement')).to.equal('top');
  72. vm.doDestroy();
  73. expect(vm.popperJS).to.not.exist;
  74. });
  75. it('destroyPopper', () => {
  76. const vm = createTest(Popper);
  77. const vm2 = createTest(Popper);
  78. vm.createPopper();
  79. expect(() => vm.destroyPopper()).to.not.throw();
  80. expect(() => vm2.destroyPopper()).to.not.throw();
  81. });
  82. it('placement', () => {
  83. const vm = createTest(Popper, { placement: 'bottom-start' });
  84. const vm2 = createTest(Popper, { placement: 'bottom-abc' });
  85. vm.createPopper();
  86. vm2.createPopper();
  87. expect(vm.popperJS._popper.getAttribute('x-placement')).to.equal('bottom-start');
  88. expect(vm2.popperJS).to.not.exist;
  89. });
  90. it('display arrow', () => {
  91. const vm = createTest(Popper, {
  92. visibleArrow: true
  93. });
  94. vm.createPopper();
  95. expect(vm.popperJS._popper.querySelector('div[x-arrow]')).to.exist;
  96. });
  97. it('update showPopper', done => {
  98. const vm = createTest(Popper);
  99. expect(vm.popperJS).to.not.exist;
  100. vm.showPopper = true;
  101. setTimeout(_ => {
  102. expect(vm.popperJS).to.exist;
  103. vm.showPopper = false;
  104. setTimeout(_ => {
  105. expect(vm.popperJS).to.exist;
  106. }, 50);
  107. done();
  108. }, 50);
  109. });
  110. it('resetTransformOrigin', () => {
  111. const vm = createTest(Popper, {
  112. placement: 'left'
  113. });
  114. vm.createPopper();
  115. expect(vm.popperJS._popper.style.transformOrigin).to.include('right center');
  116. });
  117. it('appendArrow', () => {
  118. const vm = createTest(Popper, {
  119. visibleArrow: true
  120. });
  121. expect(vm.appended).to.empty;
  122. vm.createPopper();
  123. expect(vm.appended).to.true;
  124. vm.appendArrow();
  125. expect(vm.popperJS._popper.querySelector('[x-arrow]')).to.exist;
  126. expect(vm.appended).to.true;
  127. });
  128. it('appendArrow: add scoped', () => {
  129. const popper = document.createElement('div');
  130. popper.setAttribute('_v-110', true);
  131. const vm = createTest(CleanPopper, {
  132. reference: document.createElement('div'),
  133. visibleArrow: true,
  134. popper
  135. });
  136. expect(vm.appended).to.empty;
  137. vm.createPopper();
  138. expect(vm.popperJS._popper.querySelector('[x-arrow][_v-110]')).to.exist;
  139. });
  140. it('appendToBody set false', () => {
  141. const vm = createTest(Popper, {
  142. appendToBody: false
  143. });
  144. vm.createPopper();
  145. expect(document.body.contains(vm.popperElm)).to.false;
  146. });
  147. it('destroy', () => {
  148. const vm = createTest(Popper, true);
  149. vm.createPopper();
  150. expect(document.body.contains(vm.popperElm)).to.true;
  151. vm.$destroy();
  152. expect(document.body.contains(vm.popperElm)).to.false;
  153. });
  154. });