dialog.spec.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. });