dialog.spec.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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 dialogEl = vm.$children[0].$el;
  95. expect(getComputedStyle(dialogEl).display).to.equal('none');
  96. vm.visible = true;
  97. setTimeout(() => {
  98. expect(getComputedStyle(dialogEl).display).to.not.equal('none');
  99. vm.visible = false;
  100. setTimeout(() => {
  101. expect(getComputedStyle(dialogEl).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. @opened="handleOpened"
  146. @close="handleClose"
  147. @closed="handleClosed"
  148. :title="title"
  149. :visible.sync="visible">
  150. <span>这是一段信息</span>
  151. </el-dialog>
  152. </div>
  153. `,
  154. methods: {
  155. handleOpen() {
  156. this.state = 'open';
  157. },
  158. handleOpened() {
  159. this.animationState = 'opened';
  160. },
  161. handleClose() {
  162. this.state = 'close';
  163. },
  164. handleClosed() {
  165. this.animationState = 'closed';
  166. }
  167. },
  168. data() {
  169. return {
  170. state: '',
  171. animationState: '',
  172. title: 'dialog test',
  173. visible: false
  174. };
  175. }
  176. }, true);
  177. vm.visible = true;
  178. setTimeout(() => {
  179. expect(vm.state).to.equal('open');
  180. expect(vm.animationState).to.equal('opened');
  181. vm.visible = false;
  182. setTimeout(() => {
  183. expect(vm.state).to.equal('close');
  184. expect(vm.animationState).to.equal('closed');
  185. done();
  186. }, 400);
  187. }, 400);
  188. });
  189. it('click dialog to close', done => {
  190. vm = createVue({
  191. template: `
  192. <div>
  193. <el-dialog :title="title" :visible.sync="visible">
  194. <span>这是一段信息</span>
  195. </el-dialog>
  196. </div>
  197. `,
  198. data() {
  199. return {
  200. title: 'dialog test',
  201. visible: true
  202. };
  203. }
  204. }, true);
  205. const dialog = vm.$children[0];
  206. setTimeout(() => {
  207. dialog.$el.click();
  208. setTimeout(() => {
  209. expect(vm.visible).to.be.false;
  210. done();
  211. }, 400);
  212. }, 50);
  213. });
  214. it('click header btn', done => {
  215. vm = createVue({
  216. template: `
  217. <div>
  218. <el-dialog :title="title" :visible.sync="visible">
  219. <span>这是一段信息</span>
  220. </el-dialog>
  221. </div>
  222. `,
  223. data() {
  224. return {
  225. title: 'dialog test',
  226. visible: true
  227. };
  228. }
  229. }, true);
  230. const dialog = vm.$children[0];
  231. setTimeout(() => {
  232. dialog.$el.querySelector('.el-dialog__headerbtn').click();
  233. setTimeout(() => {
  234. expect(vm.visible).to.be.false;
  235. done();
  236. }, 500);
  237. }, 50);
  238. });
  239. it('before close', done => {
  240. const spy = sinon.spy();
  241. vm = createVue({
  242. template: `
  243. <div>
  244. <el-dialog :title="title" :visible="visible" :before-close="beforeClose"></el-dialog>
  245. </div>
  246. `,
  247. data() {
  248. return {
  249. title: 'dialog test',
  250. visible: true
  251. };
  252. },
  253. methods: {
  254. beforeClose(done) {
  255. spy();
  256. done();
  257. }
  258. }
  259. }, true);
  260. const dialog = vm.$children[0];
  261. setTimeout(() => {
  262. dialog.$el.click();
  263. setTimeout(() => {
  264. expect(spy.called).to.be.true;
  265. done();
  266. }, 500);
  267. }, 10);
  268. });
  269. });