input.spec.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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. // Github issue #2836
  99. it('resize', done => {
  100. vm = createVue({
  101. template: `
  102. <div>
  103. <el-input type="textarea" :resize="resize"></el-input>
  104. </div>
  105. `,
  106. data: {
  107. resize: 'none'
  108. }
  109. }, true);
  110. vm.$nextTick(() => {
  111. expect(vm.$el.querySelector('.el-textarea__inner').style.resize).to.be.equal(vm.resize);
  112. vm.resize = 'horizontal';
  113. vm.$nextTick(() => {
  114. expect(vm.$el.querySelector('.el-textarea__inner').style.resize).to.be.equal(vm.resize);
  115. done();
  116. });
  117. });
  118. });
  119. it('autosize', done => {
  120. vm = createVue({
  121. template: `
  122. <div>
  123. <el-input
  124. ref="limitSize"
  125. type="textarea"
  126. :autosize="{minRows: 3, maxRows: 5}"
  127. v-model="textareaValue"
  128. >
  129. </el-input>
  130. <el-input
  131. ref="limitlessSize"
  132. type="textarea"
  133. autosize
  134. v-model="textareaValue"
  135. >
  136. </el-input>
  137. </div>
  138. `,
  139. data() {
  140. return {
  141. textareaValue: 'sda\ndasd\nddasdsda\ndasd\nddasdsda\ndasd\nddasdsda\ndasd\nddasd'
  142. };
  143. }
  144. }, true);
  145. var limitSizeInput = vm.$refs.limitSize;
  146. var limitlessSizeInput = vm.$refs.limitlessSize;
  147. expect(limitSizeInput.textareaStyle.height).to.be.equal('117px');
  148. expect(limitlessSizeInput.textareaStyle.height).to.be.equal('201px');
  149. vm.textareaValue = '';
  150. setTimeout(_ => {
  151. expect(limitSizeInput.textareaStyle.height).to.be.equal('75px');
  152. expect(limitlessSizeInput.textareaStyle.height).to.be.equal('33px');
  153. done();
  154. }, 200);
  155. });
  156. it('focus', done => {
  157. vm = createVue({
  158. template: `
  159. <el-input ref="input">
  160. </el-input>
  161. `
  162. }, true);
  163. const spy = sinon.spy();
  164. vm.$refs.input.$on('focus', spy);
  165. vm.$refs.input.focus();
  166. vm.$nextTick(_ => {
  167. expect(spy.calledOnce).to.be.true;
  168. done();
  169. });
  170. });
  171. describe('Input Events', () => {
  172. it('event:focus & blur', done => {
  173. vm = createVue({
  174. template: `
  175. <el-input
  176. ref="input"
  177. placeholder="请输入内容"
  178. value="input">
  179. </el-input>
  180. `
  181. }, true);
  182. const spyFocus = sinon.spy();
  183. const spyBlur = sinon.spy();
  184. vm.$refs.input.$on('focus', spyFocus);
  185. vm.$refs.input.$on('blur', spyBlur);
  186. vm.$el.querySelector('input').focus();
  187. vm.$el.querySelector('input').blur();
  188. vm.$nextTick(_ => {
  189. expect(spyFocus.calledOnce).to.be.true;
  190. expect(spyBlur.calledOnce).to.be.true;
  191. done();
  192. });
  193. });
  194. it('event:change', done => {
  195. vm = createVue({
  196. template: `
  197. <el-input
  198. ref="input"
  199. placeholder="请输入内容"
  200. :value="input">
  201. </el-input>
  202. `,
  203. data() {
  204. return {
  205. input: 'a'
  206. };
  207. }
  208. }, true);
  209. const spy = sinon.spy();
  210. vm.$refs.input.$on('change', spy);
  211. vm.input = 'b';
  212. vm.$nextTick(_ => {
  213. expect(spy.withArgs('b').calledOnce).to.be.false;
  214. done();
  215. });
  216. });
  217. });
  218. });