select.spec.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  1. import { createTest, createVue, triggerEvent, destroyVM } from '../util';
  2. import Select from 'packages/select';
  3. describe('Select', () => {
  4. const getSelectVm = (configs = {}, options) => {
  5. ['multiple', 'clearable', 'filterable', 'allowCreate', 'remote', 'collapseTags', 'automaticDropdown'].forEach(config => {
  6. configs[config] = configs[config] || false;
  7. });
  8. configs.multipleLimit = configs.multipleLimit || 0;
  9. if (!options) {
  10. options = [{
  11. value: '选项1',
  12. label: '黄金糕',
  13. disabled: false
  14. }, {
  15. value: '选项2',
  16. label: '双皮奶',
  17. disabled: false
  18. }, {
  19. value: '选项3',
  20. label: '蚵仔煎',
  21. disabled: false
  22. }, {
  23. value: '选项4',
  24. label: '龙须面',
  25. disabled: false
  26. }, {
  27. value: '选项5',
  28. label: '北京烤鸭',
  29. disabled: false
  30. }];
  31. }
  32. const vm = createVue({
  33. template: `
  34. <div>
  35. <el-select
  36. ref="select"
  37. v-model="value"
  38. :multiple="multiple"
  39. :multiple-limit="multipleLimit"
  40. :popper-class="popperClass"
  41. :clearable="clearable"
  42. :filterable="filterable"
  43. :collapse-tags="collapseTags"
  44. :allow-create="allowCreate"
  45. :filterMethod="filterMethod"
  46. :remote="remote"
  47. :loading="loading"
  48. :remoteMethod="remoteMethod"
  49. :automatic-dropdown="automaticDropdown">
  50. <el-option
  51. v-for="item in options"
  52. :label="item.label"
  53. :key="item.value"
  54. :disabled="item.disabled"
  55. :value="item.value">
  56. </el-option>
  57. </el-select>
  58. </div>
  59. `,
  60. data() {
  61. return {
  62. options,
  63. multiple: configs.multiple,
  64. multipleLimit: configs.multipleLimit,
  65. clearable: configs.clearable,
  66. filterable: configs.filterable,
  67. collapseTags: configs.collapseTags,
  68. allowCreate: configs.allowCreate,
  69. popperClass: configs.popperClass,
  70. automaticDropdown: configs.automaticDropdown,
  71. loading: false,
  72. filterMethod: configs.filterMethod && configs.filterMethod(this),
  73. remote: configs.remote,
  74. remoteMethod: configs.remoteMethod && configs.remoteMethod(this),
  75. value: configs.multiple ? [] : ''
  76. };
  77. }
  78. }, true);
  79. return vm;
  80. };
  81. let vm;
  82. afterEach(() => {
  83. destroyVM(vm);
  84. });
  85. it('create', () => {
  86. vm = createTest(Select, true);
  87. expect(vm.$el.className).to.equal('el-select');
  88. expect(vm.$el.querySelector('.el-input__inner').placeholder).to.equal('请选择');
  89. vm.toggleMenu();
  90. expect(vm.visible).to.true;
  91. });
  92. it('options rendered correctly', () => {
  93. vm = getSelectVm();
  94. const options = vm.$el.querySelectorAll('.el-select-dropdown__item');
  95. const result = [].every.call(options, (option, index) => {
  96. let text = option.querySelector('span').textContent;
  97. return text === vm.options[index].label;
  98. });
  99. expect(result).to.true;
  100. });
  101. it('custom dropdown class', () => {
  102. vm = getSelectVm({ popperClass: 'custom-dropdown' });
  103. const dropdown = vm.$el.querySelector('.el-select-dropdown');
  104. expect(dropdown.classList.contains('custom-dropdown')).to.true;
  105. });
  106. it('default value', done => {
  107. vm = createVue({
  108. template: `
  109. <div>
  110. <el-select v-model="value">
  111. <el-option
  112. v-for="item in options"
  113. :label="item.label"
  114. :key="item.value"
  115. :value="item.value">
  116. </el-option>
  117. </el-select>
  118. </div>
  119. `,
  120. data() {
  121. return {
  122. options: [{
  123. value: '选项1',
  124. label: '黄金糕'
  125. }, {
  126. value: '选项2',
  127. label: '双皮奶'
  128. }],
  129. value: '选项2'
  130. };
  131. }
  132. }, true);
  133. setTimeout(() => {
  134. expect(vm.$el.querySelector('.el-input__inner').value).to.equal('双皮奶');
  135. done();
  136. }, 100);
  137. });
  138. it('single select', done => {
  139. vm = createVue({
  140. template: `
  141. <div>
  142. <el-select v-model="value" @change="handleChange">
  143. <el-option
  144. v-for="item in options"
  145. :label="item.label"
  146. :key="item.value"
  147. :value="item.value">
  148. <p>{{item.label}} {{item.value}}</p>
  149. </el-option>
  150. </el-select>
  151. </div>
  152. `,
  153. data() {
  154. return {
  155. options: [{
  156. value: '选项1',
  157. label: '黄金糕'
  158. }, {
  159. value: '选项2',
  160. label: '双皮奶'
  161. }, {
  162. value: '选项3',
  163. label: '蚵仔煎'
  164. }, {
  165. value: '选项4',
  166. label: '龙须面'
  167. }, {
  168. value: '选项5',
  169. label: '北京烤鸭'
  170. }],
  171. value: '',
  172. count: 0
  173. };
  174. },
  175. methods: {
  176. handleChange() {
  177. this.count++;
  178. }
  179. }
  180. }, true);
  181. const options = vm.$el.querySelectorAll('.el-select-dropdown__item');
  182. expect(vm.value).to.equal('');
  183. triggerEvent(options[2], 'mouseenter');
  184. options[2].click();
  185. setTimeout(() => {
  186. expect(vm.value).to.equal('选项3');
  187. expect(vm.count).to.equal(1);
  188. triggerEvent(options[2], 'mouseenter');
  189. options[4].click();
  190. setTimeout(() => {
  191. expect(vm.value).to.equal('选项5');
  192. expect(vm.count).to.equal(2);
  193. done();
  194. }, 100);
  195. }, 100);
  196. });
  197. it('disabled option', done => {
  198. vm = getSelectVm();
  199. vm.options[1].disabled = true;
  200. setTimeout(() => {
  201. const options = vm.$el.querySelectorAll('.el-select-dropdown__item');
  202. expect(options[1].classList.contains('is-disabled')).to.true;
  203. options[1].click();
  204. setTimeout(() => {
  205. expect(vm.value).to.equal('');
  206. done();
  207. }, 100);
  208. }, 100);
  209. });
  210. it('disabled select', () => {
  211. vm = createTest(Select, { disabled: true }, true);
  212. expect(vm.$el.querySelector('.el-input').classList.contains('is-disabled')).to.true;
  213. });
  214. it('visible event', done => {
  215. vm = createVue({
  216. template: `
  217. <div>
  218. <el-select v-model="value" @visible-change="handleVisibleChange">
  219. <el-option
  220. v-for="item in options"
  221. :label="item.label"
  222. :key="item.value"
  223. :value="item.value">
  224. </el-option>
  225. </el-select>
  226. </div>
  227. `,
  228. data() {
  229. return {
  230. options: [],
  231. value: '',
  232. visible: ''
  233. };
  234. },
  235. methods: {
  236. handleVisibleChange(val) {
  237. this.visible = val;
  238. }
  239. }
  240. }, true);
  241. vm.$children[0].visible = true;
  242. setTimeout(() => {
  243. expect(vm.visible).to.true;
  244. done();
  245. }, 50);
  246. });
  247. it('keyboard operations', done => {
  248. vm = getSelectVm();
  249. const select = vm.$children[0];
  250. let i = 8;
  251. while (i--) {
  252. select.navigateOptions('next');
  253. }
  254. select.navigateOptions('prev');
  255. setTimeout(() => {
  256. expect(select.hoverIndex).to.equal(0);
  257. select.selectOption();
  258. setTimeout(() => {
  259. expect(select.value).to.equal('选项1');
  260. done();
  261. }, 100);
  262. }, 100);
  263. });
  264. it('clearable', done => {
  265. vm = getSelectVm({ clearable: true });
  266. const select = vm.$children[0];
  267. vm.value = '选项1';
  268. select.inputHovering = true;
  269. setTimeout(() => {
  270. const icon = vm.$el.querySelector('.el-input__icon');
  271. expect(icon.classList.contains('el-icon-circle-close')).to.true;
  272. icon.click();
  273. expect(vm.value).to.equal('');
  274. done();
  275. }, 100);
  276. });
  277. it('object typed value', done => {
  278. vm = createVue({
  279. template: `
  280. <div>
  281. <el-select v-model="value" value-key="id">
  282. <el-option
  283. v-for="item in options"
  284. :label="item.label"
  285. :key="item.id"
  286. :value="item">
  287. </el-option>
  288. </el-select>
  289. </div>
  290. `,
  291. data() {
  292. return {
  293. options: [{
  294. id: 1,
  295. label: 'label1'
  296. }, {
  297. id: 2,
  298. label: 'label2'
  299. }],
  300. value: {
  301. id: 1,
  302. label: 'label1'
  303. }
  304. };
  305. }
  306. }, true);
  307. setTimeout(() => {
  308. expect(vm.$el.querySelector('.el-input__inner').value).to.equal('label1');
  309. expect(vm.$el.querySelector('.el-select-dropdown__item').classList.contains('selected'));
  310. done();
  311. }, 100);
  312. });
  313. it('prefixed icon', () => {
  314. vm = createTest({
  315. template: `
  316. <div>
  317. <el-select v-model="value">
  318. <el-option
  319. v-for="item in options"
  320. :label="item.label"
  321. :key="item.value"
  322. :value="item.value">
  323. </el-option>
  324. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  325. </el-select>
  326. </div>
  327. `,
  328. data() {
  329. return {
  330. options: [],
  331. value: ''
  332. };
  333. }
  334. });
  335. expect(vm.$el.querySelector('.el-input__icon').classList.contains('el-icon-search')).to.be.true;
  336. });
  337. it('custom el-option template', () => {
  338. vm = createVue({
  339. template: `
  340. <div>
  341. <el-select v-model="value">
  342. <el-option
  343. v-for="item in options"
  344. :label="item.label"
  345. :key="item.value"
  346. :value="item.value">
  347. <p>{{item.label}} {{item.value}}</p>
  348. </el-option>
  349. </el-select>
  350. </div>
  351. `,
  352. data() {
  353. return {
  354. options: [{
  355. value: 'value',
  356. label: 'label'
  357. }],
  358. value: ''
  359. };
  360. }
  361. }, true);
  362. expect(vm.$el.querySelector('.el-select-dropdown__item p').textContent).to.equal('label value');
  363. });
  364. it('option group', () => {
  365. vm = createVue({
  366. template: `
  367. <div>
  368. <el-select v-model="value">
  369. <el-option-group
  370. v-for="group in options"
  371. :key="group.label"
  372. :disabled="group.disabled"
  373. :label="group.label">
  374. <el-option
  375. v-for="item in group.options"
  376. :label="item.label"
  377. :key="item.value"
  378. :value="item.value">
  379. </el-option>
  380. </el-option-group>
  381. </el-select>
  382. </div>
  383. `,
  384. data() {
  385. return {
  386. options: [{
  387. label: '热门城市',
  388. options: [{
  389. value: 'Shanghai',
  390. label: '上海'
  391. }, {
  392. value: 'Beijing',
  393. label: '北京'
  394. }]
  395. }, {
  396. label: '城市名',
  397. disabled: true,
  398. options: [{
  399. value: 'Chengdu',
  400. label: '成都'
  401. }, {
  402. value: 'Shenzhen',
  403. label: '深圳'
  404. }, {
  405. value: 'Guangzhou',
  406. label: '广州'
  407. }, {
  408. value: 'Dalian',
  409. label: '大连'
  410. }]
  411. }],
  412. value: ''
  413. };
  414. }
  415. }, true);
  416. const groups = vm.$el.querySelectorAll('.el-select-group__wrap');
  417. const options = groups[1].querySelectorAll('.el-select-dropdown__item');
  418. expect(groups.length).to.equal(2);
  419. expect(options.length).to.equal(4);
  420. expect(options[0].querySelector('span').textContent).to.equal('成都');
  421. });
  422. it('filterable', done => {
  423. vm = getSelectVm({ filterable: true });
  424. const select = vm.$children[0];
  425. setTimeout(() => {
  426. select.selectedLabel = '面';
  427. select.onInputChange();
  428. select.visible = true;
  429. setTimeout(() => {
  430. expect(select.filteredOptionsCount).to.equal(1);
  431. done();
  432. }, 10);
  433. }, 10);
  434. });
  435. it('filterable with custom filter-method', done => {
  436. const filterMethod = vm => {
  437. return query => {
  438. vm.options = vm.options.filter(option => option.label.indexOf(query) === -1);
  439. };
  440. };
  441. vm = getSelectVm({ filterable: true, filterMethod });
  442. const select = vm.$children[0];
  443. select.$el.click();
  444. setTimeout(() => {
  445. select.selectedLabel = '面';
  446. select.onInputChange();
  447. setTimeout(() => {
  448. expect(select.filteredOptionsCount).to.equal(4);
  449. done();
  450. }, 10);
  451. }, 10);
  452. });
  453. it('default-first-option', done => {
  454. vm = createVue({
  455. template: `
  456. <div>
  457. <el-select
  458. v-model="value"
  459. default-first-option
  460. filterable
  461. >
  462. <el-option
  463. v-for="item in options"
  464. :label="item"
  465. :key="item"
  466. :value="item"
  467. />
  468. </el-select>
  469. </div>
  470. `,
  471. data() {
  472. return {
  473. options: ['1', '2', '3', '4', '5'],
  474. value: ''
  475. };
  476. }
  477. }, true);
  478. const select = vm.$children[0];
  479. setTimeout(() => {
  480. select.$el.click();
  481. select.query = '3';
  482. select.handleQueryChange('3');
  483. select.selectOption();
  484. setTimeout(() => {
  485. expect(select.value).to.equal('3');
  486. done();
  487. }, 10);
  488. }, 10);
  489. });
  490. it('allow create', done => {
  491. vm = getSelectVm({ filterable: true, allowCreate: true });
  492. const select = vm.$children[0];
  493. select.$el.querySelector('input').focus();
  494. setTimeout(() => {
  495. select.selectedLabel = 'new';
  496. select.onInputChange();
  497. setTimeout(() => {
  498. const options = document.querySelectorAll('.el-select-dropdown__item span');
  499. const target = [].filter.call(options, option => option.innerText === 'new');
  500. target[0].click();
  501. setTimeout(() => {
  502. expect(select.value.indexOf('new') > -1).to.true;
  503. done();
  504. }, 10);
  505. }, 10);
  506. }, 10);
  507. });
  508. it('multiple select', done => {
  509. vm = getSelectVm({ multiple: true });
  510. const options = vm.$el.querySelectorAll('.el-select-dropdown__item');
  511. vm.value = ['选项1'];
  512. setTimeout(() => {
  513. options[1].click();
  514. setTimeout(() => {
  515. options[3].click();
  516. setTimeout(() => {
  517. expect(vm.value.indexOf('选项2') > -1 && vm.value.indexOf('选项4') > -1).to.true;
  518. const tagCloseIcons = vm.$el.querySelectorAll('.el-tag__close');
  519. tagCloseIcons[0].click();
  520. setTimeout(() => {
  521. expect(vm.value.indexOf('选项1')).to.equal(-1);
  522. done();
  523. }, 100);
  524. }, 100);
  525. }, 100);
  526. }, 100);
  527. });
  528. it('multiple remove-tag', done => {
  529. sinon.stub(window.console, 'log');
  530. vm = createVue({
  531. template: `
  532. <div>
  533. <el-select v-model="value" multiple @remove-tag="handleRemoveTag">
  534. <el-option
  535. v-for="item in options"
  536. :label="item.label"
  537. :key="item.value"
  538. :value="item.value">
  539. <p>{{item.label}} {{item.value}}</p>
  540. </el-option>
  541. </el-select>
  542. </div>
  543. `,
  544. data() {
  545. return {
  546. options: [{
  547. value: '选项1',
  548. label: '黄金糕'
  549. }, {
  550. value: '选项2',
  551. label: '双皮奶'
  552. }, {
  553. value: '选项3',
  554. label: '蚵仔煎'
  555. }, {
  556. value: '选项4',
  557. label: '龙须面'
  558. }, {
  559. value: '选项5',
  560. label: '北京烤鸭'
  561. }],
  562. value: ['选项1', '选项3']
  563. };
  564. },
  565. methods: {
  566. handleRemoveTag() {
  567. console.log('remove tag');
  568. }
  569. }
  570. }, true);
  571. expect(vm.value.length).to.equal(2);
  572. setTimeout(() => {
  573. const tagCloseIcons = vm.$el.querySelectorAll('.el-tag__close');
  574. tagCloseIcons[1].click();
  575. setTimeout(() => {
  576. expect(vm.value.length).to.equal(1);
  577. expect(window.console.log.callCount).to.equal(1);
  578. tagCloseIcons[0].click();
  579. setTimeout(() => {
  580. expect(vm.value.length).to.equal(0);
  581. expect(window.console.log.callCount).to.equal(2);
  582. window.console.log.restore();
  583. done();
  584. }, 50);
  585. }, 50);
  586. }, 50);
  587. });
  588. it('multiple limit', done => {
  589. vm = getSelectVm({ multiple: true, multipleLimit: 1 });
  590. const options = vm.$el.querySelectorAll('.el-select-dropdown__item');
  591. options[1].click();
  592. setTimeout(() => {
  593. expect(vm.value.indexOf('选项2') > -1).to.true;
  594. options[3].click();
  595. setTimeout(() => {
  596. expect(vm.value.indexOf('选项4')).to.equal(-1);
  597. done();
  598. }, 50);
  599. }, 50);
  600. });
  601. it('multiple remote search', done => {
  602. const remoteMethod = vm => {
  603. return query => {
  604. vm.loading = true;
  605. setTimeout(() => {
  606. vm.options = vm.options.filter(option => {
  607. return option.label.indexOf(query) > -1;
  608. });
  609. vm.loading = false;
  610. }, 200);
  611. };
  612. };
  613. vm = getSelectVm({
  614. multiple: true,
  615. remote: true,
  616. filterable: true,
  617. remoteMethod
  618. });
  619. const select = vm.$children[0];
  620. select.handleQueryChange('');
  621. vm.$nextTick(() => {
  622. select.handleQueryChange('面');
  623. setTimeout(() => {
  624. expect(select.filteredOptionsCount).to.equal(1);
  625. select.options[0].$el.click();
  626. vm.$nextTick(() => {
  627. expect(vm.value[0]).to.equal('选项4');
  628. select.deletePrevTag({ target: select.$refs.input });
  629. select.deletePrevTag({ target: select.$refs.input });
  630. select.resetInputState({ keyCode: 1 });
  631. vm.$nextTick(() => {
  632. expect(vm.value.length).to.equal(0);
  633. done();
  634. });
  635. });
  636. }, 250);
  637. });
  638. });
  639. it('event:focus & blur', done => {
  640. vm = createVue({
  641. template: `
  642. <el-select ref="select"></el-select>
  643. `
  644. }, true);
  645. const spyFocus = sinon.spy();
  646. const spyBlur = sinon.spy();
  647. vm.$refs.select.$on('focus', spyFocus);
  648. vm.$refs.select.$on('blur', spyBlur);
  649. vm.$el.querySelector('input').focus();
  650. vm.$el.querySelector('input').blur();
  651. setTimeout(_ => {
  652. expect(spyFocus.calledOnce).to.be.true;
  653. expect(spyBlur.calledOnce).to.be.true;
  654. done();
  655. }, 100);
  656. });
  657. it('should return focus to input inside select after option select', done => {
  658. vm = createVue({
  659. template: `
  660. <div>
  661. <el-select v-model="value" ref="select">
  662. <el-option label="1" :value="1" />
  663. </el-select>
  664. </div>
  665. `,
  666. data() {
  667. return {
  668. value: ''
  669. };
  670. }
  671. }, true);
  672. const spyInputFocus = sinon.spy();
  673. const spySelectFocus = sinon.spy();
  674. vm.$refs.select.$on('focus', spySelectFocus);
  675. vm.$refs.select.$refs.reference.$on('focus', spyInputFocus);
  676. const option = vm.$el.querySelectorAll('.el-select-dropdown__item')[0];
  677. triggerEvent(option, 'mouseenter');
  678. option.click();
  679. vm.$nextTick(_ => {
  680. expect(spyInputFocus.calledOnce).to.be.true;
  681. expect(spySelectFocus.calledOnce).not.to.be.true;
  682. done();
  683. });
  684. });
  685. it('should not open popper when automatic-dropdown not set', done => {
  686. vm = getSelectVm();
  687. vm.$refs.select.$refs.reference.$refs.input.focus();
  688. vm.$nextTick(_ => {
  689. expect(vm.$refs.select.visible).to.be.false;
  690. done();
  691. });
  692. });
  693. it('should open popper when automatic-dropdown is set', done => {
  694. vm = getSelectVm({ automaticDropdown: true });
  695. vm.$refs.select.$refs.reference.$refs.input.focus();
  696. vm.$nextTick(_ => {
  697. expect(vm.$refs.select.visible).to.be.true;
  698. done();
  699. });
  700. });
  701. it('focus', done => {
  702. vm = createVue({
  703. template: `
  704. <el-select ref="select"></el-select>
  705. `
  706. }, true);
  707. const spy = sinon.spy();
  708. vm.$refs.select.$on('focus', spy);
  709. vm.$refs.select.focus();
  710. vm.$nextTick(_ => {
  711. expect(spy.calledOnce).to.be.true;
  712. done();
  713. });
  714. });
  715. it('only emit change on user input', done => {
  716. let callCount = 0;
  717. vm = createVue({
  718. template: `
  719. <div>
  720. <el-select v-model="value" @change="change" ref="select">
  721. <el-option label="1" :value="1" />
  722. <el-option label="2" :value="2" />
  723. <el-option label="3" :value="3" />
  724. </el-select>
  725. </div>
  726. `,
  727. data() {
  728. return {
  729. value: 1,
  730. change: () => ++callCount
  731. };
  732. }
  733. });
  734. vm.value = 2;
  735. setTimeout(() => {
  736. expect(callCount).to.equal(0);
  737. const options = vm.$el.querySelectorAll('.el-select-dropdown__item');
  738. triggerEvent(options[2], 'mouseenter');
  739. options[2].click();
  740. setTimeout(() => {
  741. expect(callCount).to.equal(1);
  742. done();
  743. }, 10);
  744. }, 10);
  745. });
  746. describe('resetInputHeight', () => {
  747. const getSelectComponentVm = (configs) => {
  748. vm = getSelectVm(configs || {});
  749. return vm.$refs.select;
  750. };
  751. it('should reset height if collapse-tags option is disabled', () => {
  752. const select = getSelectComponentVm();
  753. sinon.stub(select, '$nextTick');
  754. select.resetInputHeight();
  755. expect(select.$nextTick.callCount).to.equal(1);
  756. });
  757. it('should not reset height if collapse-tags option is enabled', () => {
  758. const select = getSelectComponentVm({ collapseTags: true });
  759. sinon.stub(select, '$nextTick');
  760. select.resetInputHeight();
  761. expect(select.$nextTick.callCount).to.equal(0);
  762. });
  763. it('should reset height if both collapse-tags and filterable are enabled', () => {
  764. const select = getSelectComponentVm({ collapseTags: true, filterable: true });
  765. sinon.stub(select, '$nextTick');
  766. select.resetInputHeight();
  767. expect(select.$nextTick.callCount).to.equal(1);
  768. });
  769. });
  770. });