dialog.spec.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  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');
  126. expect(vm.$el.querySelector('.el-dialog').classList.contains('is-fullscreen')).to.true;
  127. });
  128. it('top', () => {
  129. vm = getDialogVm('top="100px"');
  130. expect(vm.$el.querySelector('.el-dialog').style.marginTop).to.equal('100px');
  131. });
  132. it('custom-class', () => {
  133. vm = getDialogVm('custom-class="my-dialog"');
  134. expect(vm.$el.querySelector('.el-dialog').classList.contains('my-dialog')).to.true;
  135. });
  136. });
  137. it('events', done => {
  138. vm = createVue({
  139. template: `
  140. <div>
  141. <el-dialog
  142. @open="handleOpen"
  143. @close="handleClose"
  144. :title="title"
  145. :visible.sync="visible">
  146. <span>这是一段信息</span>
  147. </el-dialog>
  148. </div>
  149. `,
  150. methods: {
  151. handleOpen() {
  152. this.state = 'open';
  153. },
  154. handleClose() {
  155. this.state = 'closed';
  156. }
  157. },
  158. data() {
  159. return {
  160. state: '',
  161. title: 'dialog test',
  162. visible: false
  163. };
  164. }
  165. }, true);
  166. vm.visible = true;
  167. setTimeout(() => {
  168. expect(vm.state).to.equal('open');
  169. vm.visible = false;
  170. setTimeout(() => {
  171. expect(vm.state).to.equal('closed');
  172. done();
  173. }, 50);
  174. }, 50);
  175. });
  176. it('click dialog to close', done => {
  177. vm = createVue({
  178. template: `
  179. <div>
  180. <el-dialog :title="title" :visible.sync="visible">
  181. <span>这是一段信息</span>
  182. </el-dialog>
  183. </div>
  184. `,
  185. data() {
  186. return {
  187. title: 'dialog test',
  188. visible: true
  189. };
  190. }
  191. }, true);
  192. const dialog = vm.$children[0];
  193. setTimeout(() => {
  194. dialog.$el.click();
  195. setTimeout(() => {
  196. expect(vm.visible).to.be.false;
  197. done();
  198. }, 400);
  199. }, 50);
  200. });
  201. it('click header btn', done => {
  202. vm = createVue({
  203. template: `
  204. <div>
  205. <el-dialog :title="title" :visible.sync="visible">
  206. <span>这是一段信息</span>
  207. </el-dialog>
  208. </div>
  209. `,
  210. data() {
  211. return {
  212. title: 'dialog test',
  213. visible: true
  214. };
  215. }
  216. }, true);
  217. const dialog = vm.$children[0];
  218. setTimeout(() => {
  219. dialog.$el.querySelector('.el-dialog__headerbtn').click();
  220. setTimeout(() => {
  221. expect(vm.visible).to.be.false;
  222. done();
  223. }, 500);
  224. }, 50);
  225. });
  226. it('before close', done => {
  227. const spy = sinon.spy();
  228. vm = createVue({
  229. template: `
  230. <div>
  231. <el-dialog :title="title" :visible="visible" :before-close="beforeClose"></el-dialog>
  232. </div>
  233. `,
  234. data() {
  235. return {
  236. title: 'dialog test',
  237. visible: true
  238. };
  239. },
  240. methods: {
  241. beforeClose(done) {
  242. spy();
  243. done();
  244. }
  245. }
  246. }, true);
  247. const dialog = vm.$children[0];
  248. setTimeout(() => {
  249. dialog.$el.click();
  250. setTimeout(() => {
  251. expect(spy.called).to.be.true;
  252. done();
  253. }, 500);
  254. }, 10);
  255. });
  256. });