dialog.spec.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. import { createVue, destroyVM } from '../util';
  2. describe('Dialog', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', done => {
  8. vm = createVue({
  9. template: `
  10. <div>
  11. <el-dialog :title="title" :visible="visible"></el-dialog>
  12. </div>
  13. `,
  14. data() {
  15. return {
  16. title: 'dialog test',
  17. visible: true
  18. };
  19. }
  20. }, true);
  21. const dialog = vm.$children[0];
  22. setTimeout(() => {
  23. expect(document.querySelector('.v-modal')).to.exist;
  24. expect(vm.$el.querySelector('.el-dialog__title').textContent).to.equal('dialog test');
  25. expect(dialog.$el.style.display).to.not.equal('none');
  26. done();
  27. }, 10);
  28. });
  29. it('render correct content', done => {
  30. vm = createVue({
  31. template: `
  32. <div>
  33. <el-dialog :title="title" :visible="visible">
  34. <span>这是一段信息</span>
  35. <span slot="footer" class="dialog-footer">
  36. <el-button @click.native="dialogVisible = false">取消</el-button>
  37. <el-button type="primary" @click.native="dialogVisible = false">确定</el-button>
  38. </span>
  39. </el-dialog>
  40. </div>
  41. `,
  42. data() {
  43. return {
  44. title: 'dialog test',
  45. visible: true
  46. };
  47. }
  48. }, true);
  49. setTimeout(() => {
  50. const footerBtns = vm.$el.querySelectorAll('.el-dialog__footer .el-button');
  51. expect(vm.$el.querySelector('.el-dialog__body span').textContent).to.equal('这是一段信息');
  52. expect(footerBtns.length).to.equal(2);
  53. expect(footerBtns[0].querySelector('span').textContent).to.equal('取消');
  54. expect(footerBtns[1].querySelector('span').textContent).to.equal('确定');
  55. done();
  56. }, 100);
  57. });
  58. it('append to body', done => {
  59. vm = createVue({
  60. template: `
  61. <div>
  62. <el-dialog :title="title" append-to-body :visible="visible"></el-dialog>
  63. </div>
  64. `,
  65. data() {
  66. return {
  67. title: 'dialog test',
  68. visible: true
  69. };
  70. }
  71. }, true);
  72. const dialog = vm.$children[0];
  73. setTimeout(() => {
  74. expect(dialog.$el.parentNode).to.equal(document.body);
  75. done();
  76. }, 10);
  77. });
  78. it('open and close', done => {
  79. vm = createVue({
  80. template: `
  81. <div>
  82. <el-dialog :title="title" :visible.sync="visible">
  83. <span>这是一段信息</span>
  84. </el-dialog>
  85. </div>
  86. `,
  87. data() {
  88. return {
  89. title: 'dialog test',
  90. visible: false
  91. };
  92. }
  93. }, true);
  94. const dialog = vm.$children[0];
  95. expect(dialog.$el.style.display).to.equal('none');
  96. vm.visible = true;
  97. setTimeout(() => {
  98. expect(dialog.$el.style.display).to.not.equal('none');
  99. vm.visible = false;
  100. setTimeout(() => {
  101. expect(dialog.$el.style.display).to.equal('none');
  102. done();
  103. }, 400);
  104. }, 50);
  105. });
  106. describe('props', () => {
  107. const getDialogVm = (props, options) => {
  108. return createVue(Object.assign({
  109. template: `
  110. <div>
  111. <el-dialog ${ props } :title="title" :visible="visible">
  112. <span>这是一段信息</span>
  113. </el-dialog>
  114. </div>
  115. `,
  116. data() {
  117. return {
  118. title: 'dialog test',
  119. visible: true
  120. };
  121. }
  122. }, options), true);
  123. };
  124. it('fullscreen', () => {
  125. vm = getDialogVm('fullscreen width="40%"');
  126. const dialogEl = vm.$el.querySelector('.el-dialog');
  127. expect(dialogEl.classList.contains('is-fullscreen')).to.true;
  128. expect(dialogEl.style.width).to.be.empty;
  129. });
  130. it('top', () => {
  131. vm = getDialogVm('top="100px"');
  132. expect(vm.$el.querySelector('.el-dialog').style.marginTop).to.equal('100px');
  133. });
  134. it('custom-class', () => {
  135. vm = getDialogVm('custom-class="my-dialog"');
  136. expect(vm.$el.querySelector('.el-dialog').classList.contains('my-dialog')).to.true;
  137. });
  138. });
  139. it('events', done => {
  140. vm = createVue({
  141. template: `
  142. <div>
  143. <el-dialog
  144. @open="handleOpen"
  145. @close="handleClose"
  146. :title="title"
  147. :visible.sync="visible">
  148. <span>这是一段信息</span>
  149. </el-dialog>
  150. </div>
  151. `,
  152. methods: {
  153. handleOpen() {
  154. this.state = 'open';
  155. },
  156. handleClose() {
  157. this.state = 'closed';
  158. }
  159. },
  160. data() {
  161. return {
  162. state: '',
  163. title: 'dialog test',
  164. visible: false
  165. };
  166. }
  167. }, true);
  168. vm.visible = true;
  169. setTimeout(() => {
  170. expect(vm.state).to.equal('open');
  171. vm.visible = false;
  172. setTimeout(() => {
  173. expect(vm.state).to.equal('closed');
  174. done();
  175. }, 50);
  176. }, 50);
  177. });
  178. it('click dialog to close', done => {
  179. vm = createVue({
  180. template: `
  181. <div>
  182. <el-dialog :title="title" :visible.sync="visible">
  183. <span>这是一段信息</span>
  184. </el-dialog>
  185. </div>
  186. `,
  187. data() {
  188. return {
  189. title: 'dialog test',
  190. visible: true
  191. };
  192. }
  193. }, true);
  194. const dialog = vm.$children[0];
  195. setTimeout(() => {
  196. dialog.$el.click();
  197. setTimeout(() => {
  198. expect(vm.visible).to.be.false;
  199. done();
  200. }, 400);
  201. }, 50);
  202. });
  203. it('click header btn', done => {
  204. vm = createVue({
  205. template: `
  206. <div>
  207. <el-dialog :title="title" :visible.sync="visible">
  208. <span>这是一段信息</span>
  209. </el-dialog>
  210. </div>
  211. `,
  212. data() {
  213. return {
  214. title: 'dialog test',
  215. visible: true
  216. };
  217. }
  218. }, true);
  219. const dialog = vm.$children[0];
  220. setTimeout(() => {
  221. dialog.$el.querySelector('.el-dialog__headerbtn').click();
  222. setTimeout(() => {
  223. expect(vm.visible).to.be.false;
  224. done();
  225. }, 500);
  226. }, 50);
  227. });
  228. it('before close', done => {
  229. const spy = sinon.spy();
  230. vm = createVue({
  231. template: `
  232. <div>
  233. <el-dialog :title="title" :visible="visible" :before-close="beforeClose"></el-dialog>
  234. </div>
  235. `,
  236. data() {
  237. return {
  238. title: 'dialog test',
  239. visible: true
  240. };
  241. },
  242. methods: {
  243. beforeClose(done) {
  244. spy();
  245. done();
  246. }
  247. }
  248. }, true);
  249. const dialog = vm.$children[0];
  250. setTimeout(() => {
  251. dialog.$el.click();
  252. setTimeout(() => {
  253. expect(spy.called).to.be.true;
  254. done();
  255. }, 500);
  256. }, 10);
  257. });
  258. });