input.spec.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import { createVue, destroyVM } from '../util';
  2. describe('Input', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', () => {
  8. vm = createVue({
  9. template: `
  10. <el-input
  11. :minlength="3"
  12. :maxlength="5"
  13. placeholder="请输入内容"
  14. @focus="handleFocus"
  15. value="input">
  16. </el-input>
  17. `,
  18. data() {
  19. return {
  20. inputFocus: false
  21. };
  22. },
  23. methods: {
  24. handleFocus() {
  25. this.inputFocus = true;
  26. }
  27. }
  28. }, true);
  29. let inputElm = vm.$el.querySelector('input');
  30. inputElm.focus();
  31. expect(vm.inputFocus).to.be.true;
  32. expect(inputElm.getAttribute('placeholder')).to.equal('请输入内容');
  33. expect(inputElm.value).to.equal('input');
  34. expect(inputElm.getAttribute('minlength')).to.equal('3');
  35. expect(inputElm.getAttribute('maxlength')).to.equal('5');
  36. });
  37. it('disabled', () => {
  38. vm = createVue({
  39. template: `
  40. <el-input disabled>
  41. </el-input>
  42. `
  43. }, true);
  44. expect(vm.$el.querySelector('input').getAttribute('disabled')).to.ok;
  45. });
  46. it('icon', () => {
  47. vm = createVue({
  48. template: `
  49. <el-input
  50. icon="time"
  51. @click="handleIconClick"
  52. >
  53. </el-input>
  54. `,
  55. data() {
  56. return {
  57. iconClicked: false
  58. };
  59. },
  60. methods: {
  61. handleIconClick(ev) {
  62. this.iconClicked = true;
  63. }
  64. }
  65. }, true);
  66. var icon = vm.$el.querySelector('.el-input__icon');
  67. icon.click();
  68. expect(icon.classList.contains('el-icon-time')).to.true;
  69. expect(vm.iconClicked).to.true;
  70. });
  71. it('size', () => {
  72. vm = createVue({
  73. template: `
  74. <el-input size="large">
  75. </el-input>
  76. `
  77. }, true);
  78. expect(vm.$el.classList.contains('el-input--large')).to.true;
  79. });
  80. it('type', () => {
  81. vm = createVue({
  82. template: `
  83. <el-input type="textarea">
  84. </el-input>
  85. `
  86. }, true);
  87. expect(vm.$el.classList.contains('el-textarea')).to.true;
  88. });
  89. it('rows', () => {
  90. vm = createVue({
  91. template: `
  92. <el-input type="textarea" :rows="3">
  93. </el-input>
  94. `
  95. }, true);
  96. expect(vm.$el.querySelector('.el-textarea__inner').getAttribute('rows')).to.be.equal('3');
  97. });
  98. it('autosize', done => {
  99. vm = createVue({
  100. template: `
  101. <div>
  102. <el-input
  103. ref="limitSize"
  104. type="textarea"
  105. :autosize="{minRows: 3, maxRows: 5}"
  106. v-model="textareaValue"
  107. >
  108. </el-input>
  109. <el-input
  110. ref="limitlessSize"
  111. type="textarea"
  112. autosize
  113. v-model="textareaValue"
  114. >
  115. </el-input>
  116. </div>
  117. `,
  118. data() {
  119. return {
  120. textareaValue: 'sda\ndasd\nddasdsda\ndasd\nddasdsda\ndasd\nddasdsda\ndasd\nddasd'
  121. };
  122. }
  123. }, true);
  124. var limitSizeInput = vm.$refs.limitSize;
  125. var limitlessSizeInput = vm.$refs.limitlessSize;
  126. expect(limitSizeInput.textareaStyle.height).to.be.equal('117px');
  127. expect(limitlessSizeInput.textareaStyle.height).to.be.equal('201px');
  128. vm.textareaValue = '';
  129. setTimeout(_ => {
  130. expect(limitSizeInput.textareaStyle.height).to.be.equal('75px');
  131. expect(limitlessSizeInput.textareaStyle.height).to.be.equal('33px');
  132. done();
  133. }, 200);
  134. });
  135. describe('Input Events', () => {
  136. it('event:focus & blur', done => {
  137. vm = createVue({
  138. template: `
  139. <el-input
  140. ref="input"
  141. placeholder="请输入内容"
  142. value="input">
  143. </el-input>
  144. `
  145. }, true);
  146. const spyFocus = sinon.spy();
  147. const spyBlur = sinon.spy();
  148. vm.$refs.input.$on('focus', spyFocus);
  149. vm.$refs.input.$on('blur', spyBlur);
  150. vm.$el.querySelector('input').focus();
  151. vm.$el.querySelector('input').blur();
  152. vm.$nextTick(_ => {
  153. expect(spyFocus.calledOnce).to.be.true;
  154. expect(spyBlur.calledOnce).to.be.true;
  155. done();
  156. });
  157. });
  158. it('event:change', done => {
  159. vm = createVue({
  160. template: `
  161. <el-input
  162. ref="input"
  163. placeholder="请输入内容"
  164. :value="input">
  165. </el-input>
  166. `,
  167. data() {
  168. return {
  169. input: 'a'
  170. };
  171. }
  172. }, true);
  173. const spy = sinon.spy();
  174. vm.$refs.input.$on('change', spy);
  175. vm.input = 'b';
  176. vm.$nextTick(_ => {
  177. expect(spy.withArgs('b').calledOnce).to.be.true;
  178. done();
  179. });
  180. });
  181. });
  182. });