dialog.spec.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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" v-model="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" v-model="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('open and close', done => {
  59. vm = createVue({
  60. template: `
  61. <div>
  62. <el-dialog :title="title" v-model="visible">
  63. <span>这是一段信息</span>
  64. </el-dialog>
  65. </div>
  66. `,
  67. data() {
  68. return {
  69. title: 'dialog test',
  70. visible: false
  71. };
  72. }
  73. }, true);
  74. const dialog = vm.$children[0];
  75. expect(dialog.$el.style.display).to.equal('none');
  76. vm.visible = true;
  77. setTimeout(() => {
  78. expect(dialog.$el.style.display).to.not.equal('none');
  79. document.querySelector('.v-modal').click();
  80. setTimeout(() => {
  81. expect(vm.visible).to.equal(false);
  82. done();
  83. }, 50);
  84. }, 50);
  85. });
  86. describe('props', () => {
  87. const getDialogVm = (props, options) => {
  88. return createVue(Object.assign({
  89. template: `
  90. <div>
  91. <el-dialog ${ props } :title="title" v-model="visible">
  92. <span>这是一段信息</span>
  93. </el-dialog>
  94. </div>
  95. `,
  96. data() {
  97. return {
  98. title: 'dialog test',
  99. visible: true
  100. };
  101. }
  102. }, options), true);
  103. };
  104. it('size', () => {
  105. vm = getDialogVm('size="full"');
  106. expect(vm.$el.querySelector('.el-dialog').classList.contains('el-dialog--full')).to.true;
  107. });
  108. it('top', () => {
  109. vm = getDialogVm('top="100px"');
  110. expect(vm.$el.querySelector('.el-dialog').style.top).to.equal('100px');
  111. });
  112. it('custom-class', () => {
  113. vm = getDialogVm('custom-class="my-dialog"');
  114. expect(vm.$el.querySelector('.el-dialog').classList.contains('my-dialog')).to.true;
  115. });
  116. });
  117. it('callbacks', done => {
  118. vm = createVue({
  119. template: `
  120. <div>
  121. <el-dialog
  122. @open="handleOpen"
  123. @close="handleClose"
  124. :title="title"
  125. v-model="visible">
  126. <span>这是一段信息</span>
  127. </el-dialog>
  128. </div>
  129. `,
  130. methods: {
  131. handleOpen() {
  132. this.state = 'open';
  133. },
  134. handleClose() {
  135. this.state = 'closed';
  136. }
  137. },
  138. data() {
  139. return {
  140. state: '',
  141. title: 'dialog test',
  142. visible: false
  143. };
  144. }
  145. }, true);
  146. const dialog = vm.$children[0];
  147. dialog.open();
  148. setTimeout(() => {
  149. expect(vm.state).to.equal('open');
  150. dialog.close();
  151. setTimeout(() => {
  152. expect(vm.state).to.equal('closed');
  153. done();
  154. }, 50);
  155. }, 50);
  156. });
  157. });