dialog.spec.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import { createVue, destroyVM } from '../util';
  2. describe('Dialog', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', () => {
  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. expect(document.querySelector('.v-modal')).to.exist;
  23. expect(vm.$el.querySelector('.el-dialog__title').textContent).to.equal('dialog test');
  24. expect(dialog.$el.style.display).to.not.equal('none');
  25. });
  26. it('render correct content', done => {
  27. vm = createVue({
  28. template: `
  29. <div>
  30. <el-dialog :title="title" v-model="visible">
  31. <span>这是一段信息</span>
  32. <span slot="footer" class="dialog-footer">
  33. <el-button @click.native="dialogVisible = false">取消</el-button>
  34. <el-button type="primary" @click.native="dialogVisible = false">确定</el-button>
  35. </span>
  36. </el-dialog>
  37. </div>
  38. `,
  39. data() {
  40. return {
  41. title: 'dialog test',
  42. visible: true
  43. };
  44. }
  45. }, true);
  46. setTimeout(() => {
  47. const footerBtns = vm.$el.querySelectorAll('.el-dialog__footer .el-button');
  48. expect(vm.$el.querySelector('.el-dialog__body span').textContent).to.equal('这是一段信息');
  49. expect(footerBtns.length).to.equal(2);
  50. expect(footerBtns[0].querySelector('span').textContent).to.equal('取消');
  51. expect(footerBtns[1].querySelector('span').textContent).to.equal('确定');
  52. done();
  53. }, 100);
  54. });
  55. it('open and close', done => {
  56. vm = createVue({
  57. template: `
  58. <div>
  59. <el-dialog :title="title" v-model="visible">
  60. <span>这是一段信息</span>
  61. </el-dialog>
  62. </div>
  63. `,
  64. data() {
  65. return {
  66. title: 'dialog test',
  67. visible: false
  68. };
  69. }
  70. }, true);
  71. const dialog = vm.$children[0];
  72. expect(dialog.$el.style.display).to.equal('none');
  73. vm.visible = true;
  74. setTimeout(() => {
  75. expect(dialog.$el.style.display).to.not.equal('none');
  76. document.querySelector('.v-modal').click();
  77. setTimeout(() => {
  78. expect(vm.visible).to.equal(false);
  79. done();
  80. }, 50);
  81. }, 50);
  82. });
  83. describe('props', () => {
  84. const getDialogVm = (props, options) => {
  85. return createVue(Object.assign({
  86. template: `
  87. <div>
  88. <el-dialog ${ props } :title="title" v-model="visible">
  89. <span>这是一段信息</span>
  90. </el-dialog>
  91. </div>
  92. `,
  93. data() {
  94. return {
  95. title: 'dialog test',
  96. visible: true
  97. };
  98. }
  99. }, options), true);
  100. };
  101. it('size', () => {
  102. vm = getDialogVm('size="full"');
  103. expect(vm.$el.querySelector('.el-dialog').classList.contains('el-dialog--full')).to.true;
  104. });
  105. it('top', () => {
  106. vm = getDialogVm('top="100px"');
  107. expect(vm.$el.querySelector('.el-dialog').style.top).to.equal('100px');
  108. });
  109. it('custom-class', () => {
  110. vm = getDialogVm('custom-class="my-dialog"');
  111. expect(vm.$el.querySelector('.el-dialog').classList.contains('my-dialog')).to.true;
  112. });
  113. });
  114. it('callbacks', done => {
  115. vm = createVue({
  116. template: `
  117. <div>
  118. <el-dialog
  119. @open="handleOpen"
  120. @close="handleClose"
  121. :title="title"
  122. v-model="visible">
  123. <span>这是一段信息</span>
  124. </el-dialog>
  125. </div>
  126. `,
  127. methods: {
  128. handleOpen() {
  129. this.state = 'open';
  130. },
  131. handleClose() {
  132. this.state = 'closed';
  133. }
  134. },
  135. data() {
  136. return {
  137. state: '',
  138. title: 'dialog test',
  139. visible: false
  140. };
  141. }
  142. }, true);
  143. const dialog = vm.$children[0];
  144. dialog.open();
  145. setTimeout(() => {
  146. expect(vm.state).to.equal('open');
  147. dialog.close();
  148. setTimeout(() => {
  149. expect(vm.state).to.equal('closed');
  150. done();
  151. }, 50);
  152. }, 50);
  153. });
  154. });