util.clickoutside.spec.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import Clickoutside from 'element-ui/src/utils/clickoutside';
  2. const ctx = '@@clickoutsideContext';
  3. import { triggerEvent, triggerClick } from '../util';
  4. describe('Utils:Clickoutside', () => {
  5. it('create', () => {
  6. let count = 0;
  7. const el = document.createElement('div');
  8. const vnode = {
  9. context: {
  10. handleClick: () => ++count
  11. }
  12. };
  13. const binding = {
  14. expression: 'handleClick'
  15. };
  16. Clickoutside.bind(el, binding, vnode);
  17. expect(el[ctx]).to.exist;
  18. });
  19. it('cotext not exist', () => {
  20. const el = document.createElement('div');
  21. const vnode = {};
  22. const binding = {
  23. expression: 'handleClick'
  24. };
  25. Clickoutside.bind(el, binding, vnode);
  26. expect(el[ctx]).to.exist;
  27. });
  28. it('binding expression', () => {
  29. const el = document.createElement('div');
  30. let count = 0;
  31. const vnode = {
  32. context: {
  33. handleClick: () => ++count
  34. }
  35. };
  36. const binding = {
  37. expression: 'handleClick'
  38. };
  39. Clickoutside.bind(el, binding, vnode);
  40. triggerClick(document);
  41. expect(count).to.equal(1);
  42. });
  43. it('click inside', () => {
  44. const el = document.createElement('div');
  45. const insideElm = document.createElement('div');
  46. let count = 0;
  47. const vnode = {
  48. context: {
  49. handleClick: () => ++count
  50. }
  51. };
  52. const binding = {
  53. expression: 'handleClick'
  54. };
  55. el.appendChild(insideElm);
  56. Clickoutside.bind(el, binding, vnode);
  57. triggerClick(insideElm);
  58. expect(count).to.equal(0);
  59. triggerClick(document);
  60. expect(count).to.equal(1);
  61. });
  62. it('tigger event in popperElm', () => {
  63. const el = document.createElement('div');
  64. const insideElm = document.createElement('div');
  65. let count = 0;
  66. const vnode = {
  67. context: {
  68. handleClick: () => ++count,
  69. popperElm: document.createElement('div')
  70. }
  71. };
  72. const binding = {
  73. expression: 'handleClick'
  74. };
  75. vnode.context.popperElm.appendChild(insideElm);
  76. Clickoutside.bind(el, binding, vnode);
  77. triggerClick(insideElm);
  78. expect(count).to.equal(0);
  79. triggerClick(document);
  80. expect(count).to.equal(1);
  81. });
  82. it('binding value', () => {
  83. const el = document.createElement('div');
  84. let count = 0;
  85. const vnode = {
  86. context: {}
  87. };
  88. const binding = {
  89. value: () => ++count
  90. };
  91. Clickoutside.bind(el, binding, vnode);
  92. expect(count).to.equal(0);
  93. triggerClick(document);
  94. expect(count).to.equal(1);
  95. });
  96. it('update', () => {
  97. let count = 0;
  98. const el = document.createElement('div');
  99. const vnode = {
  100. context: {
  101. abc: () => ++count,
  102. ddd: () => ++count
  103. }
  104. };
  105. const binding = {
  106. expression: 'abc'
  107. };
  108. const newBinding = {
  109. expression: 'ddd'
  110. };
  111. Clickoutside.bind(el, binding, vnode);
  112. expect(el[ctx].methodName).to.equal('abc');
  113. Clickoutside.update(el, newBinding);
  114. expect(el[ctx].methodName).to.equal('ddd');
  115. });
  116. it('unbind', () => {
  117. const el = document.createElement('div');
  118. let count = 0;
  119. const vnode = {
  120. context: {}
  121. };
  122. const binding = {
  123. value: () => ++count
  124. };
  125. Clickoutside.bind(el, binding, vnode);
  126. triggerClick(document);
  127. Clickoutside.unbind(el);
  128. triggerClick(document);
  129. expect(count).to.equal(1);
  130. });
  131. it('stays open on drag click', () => {
  132. const el = document.createElement('div');
  133. const insideElm = document.createElement('div');
  134. let count = 0;
  135. const vnode = {
  136. context: {
  137. handleClick: () => ++count
  138. }
  139. };
  140. const binding = {
  141. expression: 'handleClick'
  142. };
  143. el.appendChild(insideElm);
  144. Clickoutside.bind(el, binding, vnode);
  145. triggerEvent(insideElm, 'mousedown');
  146. triggerEvent(document, 'mouseup');
  147. expect(count).to.equal(1);
  148. });
  149. });