loading.spec.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. import { createVue, destroyVM } from '../util';
  2. import Vue from 'vue';
  3. import LoadingRaw from 'packages/loading';
  4. const Loading = LoadingRaw.service;
  5. describe('Loading', () => {
  6. let vm, loadingInstance, loadingInstance2;
  7. afterEach(() => {
  8. destroyVM(vm);
  9. if (loadingInstance) {
  10. loadingInstance.close();
  11. loadingInstance.$el &&
  12. loadingInstance.$el.parentNode &&
  13. loadingInstance.$el.parentNode.removeChild(loadingInstance.$el);
  14. }
  15. if (loadingInstance2) {
  16. loadingInstance2.close();
  17. loadingInstance2.$el &&
  18. loadingInstance2.$el.parentNode &&
  19. loadingInstance2.$el.parentNode.removeChild(loadingInstance2.$el);
  20. }
  21. });
  22. describe('as a directive', () => {
  23. it('create', done => {
  24. vm = createVue({
  25. template: `
  26. <div v-loading="loading"></div>
  27. `,
  28. data() {
  29. return {
  30. loading: true
  31. };
  32. }
  33. });
  34. Vue.nextTick(() => {
  35. const mask = vm.$el.querySelector('.el-loading-mask');
  36. expect(mask).to.exist;
  37. vm.loading = false;
  38. setTimeout(() => {
  39. expect(mask.style.display).to.equal('none');
  40. done();
  41. }, 100);
  42. });
  43. });
  44. it('unbind', done => {
  45. const vm1 = createVue({
  46. template: `
  47. <div v-if="show" v-loading="loading"></div>
  48. `,
  49. data() {
  50. return {
  51. show: true,
  52. loading: true
  53. };
  54. }
  55. });
  56. const vm2 = createVue({
  57. template: `
  58. <div v-if="show" v-loading.body="loading"></div>
  59. `,
  60. data() {
  61. return {
  62. show: true,
  63. loading: true
  64. };
  65. }
  66. });
  67. Vue.nextTick(() => {
  68. vm1.loading = false;
  69. vm2.loading = false;
  70. Vue.nextTick(() => {
  71. vm1.show = false;
  72. vm2.show = false;
  73. Vue.nextTick(() => {
  74. expect(document.querySelector('.el-loading-mask')).to.not.exist;
  75. done();
  76. });
  77. });
  78. });
  79. });
  80. it('body', done => {
  81. vm = createVue({
  82. template: `
  83. <div v-loading.body="loading"></div>
  84. `,
  85. data() {
  86. return {
  87. loading: true
  88. };
  89. }
  90. }, true);
  91. Vue.nextTick(() => {
  92. const mask = document.querySelector('.el-loading-mask');
  93. expect(mask.parentNode === document.body).to.true;
  94. vm.loading = false;
  95. document.body.removeChild(mask);
  96. document.body.removeChild(vm.$el);
  97. done();
  98. });
  99. });
  100. it('fullscreen', done => {
  101. vm = createVue({
  102. template: `
  103. <div v-loading.fullscreen="loading"></div>
  104. `,
  105. data() {
  106. return {
  107. loading: true
  108. };
  109. }
  110. }, true);
  111. Vue.nextTick(() => {
  112. const mask = document.querySelector('.el-loading-mask');
  113. expect(mask.parentNode === document.body).to.true;
  114. expect(mask.classList.contains('is-fullscreen')).to.true;
  115. vm.loading = false;
  116. document.body.removeChild(mask);
  117. document.body.removeChild(vm.$el);
  118. done();
  119. });
  120. });
  121. it('lock', done => {
  122. vm = createVue({
  123. template: `
  124. <div v-loading.fullscreen.lock="loading"></div>
  125. `,
  126. data() {
  127. return {
  128. loading: true
  129. };
  130. }
  131. }, true);
  132. Vue.nextTick(() => {
  133. expect(document.body.style.overflow).to.equal('hidden');
  134. vm.loading = false;
  135. document.body.removeChild(document.querySelector('.el-loading-mask'));
  136. document.body.removeChild(vm.$el);
  137. done();
  138. });
  139. });
  140. it('text', done => {
  141. vm = createVue({
  142. template: `
  143. <div v-loading="loading" element-loading-text="拼命加载中"></div>
  144. `,
  145. data() {
  146. return {
  147. loading: true
  148. };
  149. }
  150. }, true);
  151. Vue.nextTick(() => {
  152. const mask = document.querySelector('.el-loading-mask');
  153. const text = mask.querySelector('.el-loading-text');
  154. expect(text).to.exist;
  155. expect(text.textContent).to.equal('拼命加载中');
  156. done();
  157. });
  158. });
  159. });
  160. describe('as a service', () => {
  161. it('create', () => {
  162. loadingInstance = Loading();
  163. expect(document.querySelector('.el-loading-mask')).to.exist;
  164. });
  165. it('close', () => {
  166. loadingInstance = Loading();
  167. loadingInstance.close();
  168. expect(loadingInstance.visible).to.false;
  169. });
  170. it('target', done => {
  171. vm = createVue({
  172. template: `
  173. <div class="loading-container"></div>
  174. `
  175. }, true);
  176. loadingInstance = Loading({ target: '.loading-container' });
  177. let mask = document.querySelector('.el-loading-mask');
  178. let container = document.querySelector('.loading-container');
  179. expect(mask).to.exist;
  180. expect(mask.parentNode).to.equal(container);
  181. loadingInstance.close();
  182. setTimeout(() => {
  183. expect(container.style.position).to.equal('relative');
  184. done();
  185. }, 200);
  186. });
  187. it('body', () => {
  188. vm = createVue({
  189. template: `
  190. <div class="loading-container"></div>
  191. `
  192. }, true);
  193. loadingInstance = Loading({
  194. target: '.loading-container',
  195. body: true
  196. });
  197. let mask = document.querySelector('.el-loading-mask');
  198. expect(mask).to.exist;
  199. expect(mask.parentNode).to.equal(document.body);
  200. });
  201. it('fullscreen', () => {
  202. loadingInstance = Loading({ fullScreen: true });
  203. const mask = document.querySelector('.el-loading-mask');
  204. expect(mask.parentNode).to.equal(document.body);
  205. expect(mask.classList.contains('is-fullscreen')).to.true;
  206. });
  207. it('fullscreen singleton', done => {
  208. loadingInstance = Loading({ fullScreen: true });
  209. setTimeout(() => {
  210. loadingInstance2 = Loading({ fullScreen: true });
  211. setTimeout(() => {
  212. let masks = document.querySelectorAll('.el-loading-mask');
  213. expect(masks.length).to.equal(1);
  214. loadingInstance2.close();
  215. setTimeout(() => {
  216. masks = document.querySelectorAll('.el-loading-mask');
  217. expect(masks.length).to.equal(0);
  218. done();
  219. }, 350);
  220. }, 10);
  221. }, 10);
  222. });
  223. it('lock', () => {
  224. loadingInstance = Loading({ lock: true });
  225. expect(document.body.style.overflow).to.equal('hidden');
  226. });
  227. it('text', () => {
  228. loadingInstance = Loading({ text: 'Loading...' });
  229. const text = document.querySelector('.el-loading-text');
  230. expect(text).to.exist;
  231. expect(text.textContent).to.equal('Loading...');
  232. });
  233. });
  234. });