message-box.spec.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import MessageBox from 'packages/message-box';
  2. describe('MessageBox', () => {
  3. let hasPromise = true;
  4. before(() => {
  5. if (!window.Promise) {
  6. hasPromise = false;
  7. window.Promise = require('es6-promise').Promise;
  8. }
  9. });
  10. after(() => {
  11. if (!hasPromise) {
  12. window.Promise = undefined;
  13. }
  14. });
  15. afterEach(() => {
  16. const el = document.querySelector('.el-message-box__wrapper');
  17. if (!el) return;
  18. if (el.parentNode) {
  19. el.parentNode.removeChild(el);
  20. }
  21. MessageBox.close();
  22. });
  23. it('create and close', done => {
  24. MessageBox({
  25. type: 'success',
  26. title: '消息',
  27. message: '这是一段内容'
  28. });
  29. setTimeout(() => {
  30. const msgbox = document.querySelector('.el-message-box__wrapper');
  31. expect(msgbox.__vue__.$parent.visible).to.true;
  32. expect(msgbox.querySelector('.el-message-box__title').textContent).to.equal('消息');
  33. expect(msgbox.querySelector('.el-message-box__message')
  34. .querySelector('p').textContent).to.equal('这是一段内容');
  35. MessageBox.close();
  36. expect(msgbox.__vue__.$parent.visible).to.false;
  37. done();
  38. }, 300);
  39. });
  40. it('invoke with strings', done => {
  41. MessageBox('消息', '这是一段内容', 'success');
  42. setTimeout(() => {
  43. expect(document.querySelector('.el-message-box__wrapper')).to.exist;
  44. done();
  45. }, 300);
  46. });
  47. it('alert', done => {
  48. MessageBox.alert('这是一段内容', {
  49. title: '标题名称',
  50. type: 'warning'
  51. });
  52. setTimeout(() => {
  53. document.querySelector('.v-modal').click();
  54. expect(document.querySelector('.el-message-box__wrapper')
  55. .__vue__.$parent.visible).to.true;
  56. expect(document.querySelector('.el-message-box__wrapper')
  57. .__vue__.$parent.type).to.equal('warning');
  58. done();
  59. }, 300);
  60. });
  61. it('confirm', done => {
  62. MessageBox.confirm('这是一段内容', {
  63. title: '标题名称',
  64. type: 'warning'
  65. });
  66. setTimeout(() => {
  67. document.querySelector('.el-message-box__wrapper')
  68. .querySelector('.el-button--primary').click();
  69. expect(document.querySelector('.el-message-box__wrapper')
  70. .__vue__.$parent.visible).to.false;
  71. done();
  72. }, 200);
  73. });
  74. it('prompt', done => {
  75. MessageBox.prompt('这是一段内容', {
  76. title: '标题名称',
  77. inputPattern: /test/,
  78. inputErrorMessage: 'validation failed'
  79. });
  80. setTimeout(() => {
  81. expect(document.querySelector('.el-message-box__input')).to.exist;
  82. const messageBox = document.querySelector('.el-message-box__wrapper').__vue__.$parent;
  83. messageBox.inputValue = 'no';
  84. setTimeout(() => {
  85. expect(document.querySelector('.el-message-box__errormsg')
  86. .textContent).to.equal('validation failed');
  87. done();
  88. }, 100);
  89. }, 200);
  90. });
  91. describe('custom validator', () => {
  92. it('returns a string', done => {
  93. const validator = value => {
  94. if (value !== 'test') return 'wrong';
  95. return true;
  96. };
  97. MessageBox.prompt('这是一段内容', {
  98. title: '标题名称',
  99. inputValidator: validator
  100. });
  101. setTimeout(() => {
  102. const messageBox = document.querySelector('.el-message-box__wrapper').__vue__.$parent;
  103. messageBox.inputValue = 'no';
  104. setTimeout(() => {
  105. expect(document.querySelector('.el-message-box__errormsg')
  106. .textContent).to.equal('wrong');
  107. messageBox.inputValue = 'test';
  108. setTimeout(() => {
  109. expect(document.querySelector('.el-message-box__errormsg')
  110. .textContent).to.equal('');
  111. done();
  112. }, 100);
  113. }, 100);
  114. }, 200);
  115. });
  116. it('returns false', done => {
  117. const validator = value => false;
  118. MessageBox.prompt('这是一段内容', {
  119. title: '标题名称',
  120. inputValidator: validator
  121. });
  122. setTimeout(() => {
  123. const messageBox = document.querySelector('.el-message-box__wrapper').__vue__.$parent;
  124. messageBox.inputValue = 'no';
  125. setTimeout(() => {
  126. expect(document.querySelector('.el-message-box__errormsg')
  127. .textContent).to.equal('输入的数据不合法!');
  128. done();
  129. }, 100);
  130. }, 200);
  131. });
  132. });
  133. it('callback', done => {
  134. let msgAction = '';
  135. MessageBox({
  136. title: '消息',
  137. message: '这是一段内容'
  138. }, action => {
  139. msgAction = action;
  140. });
  141. setTimeout(() => {
  142. document.querySelector('.el-message-box__close').click();
  143. expect(msgAction).to.equal('cancel');
  144. done();
  145. }, 50);
  146. });
  147. it('beforeClose', done => {
  148. let msgAction = '';
  149. MessageBox({
  150. title: '消息',
  151. message: '这是一段内容',
  152. beforeClose: (action, instance) => {
  153. instance.close();
  154. }
  155. }, action => {
  156. msgAction = action;
  157. });
  158. setTimeout(() => {
  159. document.querySelector('.el-message-box__wrapper .el-button--primary').click();
  160. setTimeout(() => {
  161. expect(msgAction).to.equal('confirm');
  162. done();
  163. }, 10);
  164. }, 10);
  165. });
  166. describe('promise', () => {
  167. it('resolve', done => {
  168. MessageBox.confirm('此操作将永久删除该文件, 是否继续?', '提示')
  169. .then(action => {
  170. expect(action).to.equal('confirm');
  171. done();
  172. });
  173. setTimeout(() => {
  174. document.querySelector('.el-message-box__wrapper .el-button--primary').click();
  175. }, 50);
  176. });
  177. it('reject', done => {
  178. MessageBox.confirm('此操作将永久删除该文件, 是否继续?', '提示')
  179. .catch(action => {
  180. expect(action).to.equal('cancel');
  181. done();
  182. });
  183. setTimeout(() => {
  184. document.querySelector('.el-message-box__wrapper .el-button').click();
  185. }, 50);
  186. });
  187. });
  188. });