checkbox.spec.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. import { createVue, destroyVM } from '../util';
  2. describe('Checkbox', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', done => {
  8. vm = createVue({
  9. template: `
  10. <el-checkbox v-model="checked">
  11. </el-checkbox>
  12. `,
  13. data() {
  14. return {
  15. checked: false
  16. };
  17. }
  18. }, true);
  19. let checkboxElm = vm.$el;
  20. expect(checkboxElm.classList.contains('el-checkbox')).to.be.true;
  21. checkboxElm.click();
  22. vm.$nextTick(_ => {
  23. expect(checkboxElm.querySelector('.is-checked')).to.be.ok;
  24. done();
  25. });
  26. });
  27. it('disabled', () => {
  28. vm = createVue({
  29. template: `
  30. <el-checkbox
  31. v-model="checked"
  32. disabled
  33. >
  34. </el-checkbox>
  35. `,
  36. data() {
  37. return {
  38. checked: false
  39. };
  40. }
  41. }, true);
  42. let checkboxElm = vm.$el;
  43. expect(checkboxElm.querySelector('.is-disabled')).to.be.ok;
  44. });
  45. it('change event', done => {
  46. vm = createVue({
  47. template: `
  48. <el-checkbox v-model="checked" @change="onChange">
  49. </el-checkbox>
  50. `,
  51. methods: {
  52. onChange(val) {
  53. this.data = val;
  54. }
  55. },
  56. data() {
  57. return {
  58. data: '',
  59. checked: false
  60. };
  61. }
  62. }, true);
  63. let checkboxElm = vm.$el;
  64. checkboxElm.click();
  65. setTimeout(_ => {
  66. expect(vm.data).to.true;
  67. vm.checked = false;
  68. setTimeout(_ => {
  69. expect(vm.data).to.true;
  70. done();
  71. }, 10);
  72. }, 10);
  73. });
  74. it('checkbox group', done => {
  75. vm = createVue({
  76. template: `
  77. <el-checkbox-group v-model="checkList">
  78. <el-checkbox label="a" ref="a"></el-checkbox>
  79. <el-checkbox label="b" ref="b"></el-checkbox>
  80. <el-checkbox label="c" ref="c"></el-checkbox>
  81. <el-checkbox label="d" ref="d"></el-checkbox>
  82. </el-checkbox-group>
  83. `,
  84. data() {
  85. return {
  86. checkList: []
  87. };
  88. }
  89. }, true);
  90. expect(vm.checkList.length === 0).to.be.true;
  91. vm.$refs.a.$el.click();
  92. vm.$nextTick(_ => {
  93. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  94. done();
  95. });
  96. });
  97. it('checkbox group change event', done => {
  98. vm = createVue({
  99. template: `
  100. <el-checkbox-group v-model="checkList" @change="onChange">
  101. <el-checkbox label="a" ref="a"></el-checkbox>
  102. <el-checkbox label="b" ref="b"></el-checkbox>
  103. </el-checkbox-group>
  104. `,
  105. methods: {
  106. onChange(val) {
  107. this.data = val;
  108. }
  109. },
  110. data() {
  111. return {
  112. data: '',
  113. checkList: []
  114. };
  115. }
  116. }, true);
  117. vm.$refs.a.$el.click();
  118. setTimeout(_ => {
  119. expect(vm.data).to.deep.equal(['a']);
  120. vm.checkList = ['b'];
  121. done();
  122. }, 10);
  123. });
  124. it('checkbox group minimum and maximum', done => {
  125. vm = createVue({
  126. template: `
  127. <el-checkbox-group
  128. v-model="checkList"
  129. :min="1"
  130. :max="2"
  131. >
  132. <el-checkbox label="a" ref="a"></el-checkbox>
  133. <el-checkbox label="b" ref="b"></el-checkbox>
  134. <el-checkbox label="c" ref="c"></el-checkbox>
  135. <el-checkbox label="d" ref="d"></el-checkbox>
  136. </el-checkbox-group>
  137. `,
  138. data() {
  139. return {
  140. checkList: ['a'],
  141. lastEvent: null
  142. };
  143. }
  144. }, true);
  145. expect(vm.checkList.length === 1).to.be.true;
  146. expect(vm.$refs.a.isDisabled).to.be.true;
  147. vm.$refs.a.$el.click();
  148. vm.$nextTick(() => {
  149. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  150. vm.$refs.b.$el.click();
  151. vm.$nextTick(() => {
  152. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  153. expect(vm.checkList.indexOf('b') !== -1).to.be.true;
  154. vm.$refs.c.$el.click();
  155. vm.$nextTick(() => {
  156. expect(vm.checkList.indexOf('c') !== -1).to.be.false;
  157. expect(vm.checkList.indexOf('d') !== -1).to.be.false;
  158. expect(vm.$refs.c.isDisabled).to.be.true;
  159. expect(vm.$refs.d.isDisabled).to.be.true;
  160. done();
  161. });
  162. });
  163. });
  164. });
  165. it('nested group', done => {
  166. vm = createVue({
  167. template: `
  168. <el-checkbox-group v-model="checkList">
  169. <el-row>
  170. <el-checkbox label="a" ref="a"></el-checkbox>
  171. <el-checkbox label="b" ref="b"></el-checkbox>
  172. <el-checkbox label="c" ref="c"></el-checkbox>
  173. <el-checkbox label="d" ref="d"></el-checkbox>
  174. </el-row>
  175. </el-checkbox-group>
  176. `,
  177. data() {
  178. return {
  179. checkList: []
  180. };
  181. }
  182. }, true);
  183. expect(vm.checkList.length === 0).to.be.true;
  184. vm.$refs.a.$el.click();
  185. vm.$nextTick(_ => {
  186. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  187. done();
  188. });
  189. });
  190. it('true false label', done => {
  191. vm = createVue({
  192. template: `
  193. <el-checkbox true-label="a" :false-label="3" v-model="checked"></el-checkbox>
  194. `,
  195. data() {
  196. return {
  197. checked: 'a'
  198. };
  199. }
  200. }, true);
  201. vm.$el.click();
  202. vm.$nextTick(_ => {
  203. expect(vm.checked === 3).to.be.true;
  204. done();
  205. });
  206. });
  207. it('checked', () => {
  208. vm = createVue({
  209. template: `
  210. <div>
  211. <el-checkbox v-model="checked" checked></el-checkbox>
  212. <el-checkbox-group v-model="checklist">
  213. <el-checkbox checked label="a"></el-checkbox>
  214. </el-checkbox-group>
  215. </div>
  216. `,
  217. data() {
  218. return {
  219. checked: false,
  220. checklist: []
  221. };
  222. }
  223. }, true);
  224. expect(vm.checked).to.be.true;
  225. expect(vm.checklist.indexOf('a') !== -1).to.be.true;
  226. });
  227. describe('checkbox-button', () => {
  228. let vm;
  229. afterEach(() => {
  230. destroyVM(vm);
  231. });
  232. it('create', done => {
  233. vm = createVue({
  234. template: `
  235. <el-checkbox-button v-model="checked">
  236. </el-checkbox-button>
  237. `,
  238. data() {
  239. return {
  240. checked: false
  241. };
  242. }
  243. }, true);
  244. let checkboxElm = vm.$el;
  245. expect(checkboxElm.classList.contains('el-checkbox-button')).to.be.true;
  246. checkboxElm.click();
  247. vm.$nextTick(_ => {
  248. expect(checkboxElm.classList.contains('is-checked')).to.be.ok;
  249. done();
  250. });
  251. });
  252. it('disabled', () => {
  253. vm = createVue({
  254. template: `
  255. <el-checkbox-button
  256. v-model="checked"
  257. disabled
  258. >
  259. </el-checkbox-button>
  260. `,
  261. data() {
  262. return {
  263. checked: false
  264. };
  265. }
  266. }, true);
  267. let checkboxElm = vm.$el;
  268. expect(checkboxElm.classList.contains('is-disabled')).to.be.ok;
  269. });
  270. it('change event', done => {
  271. vm = createVue({
  272. template: `
  273. <el-checkbox-button v-model="checked" @change="onChange">
  274. </el-checkbox-button>
  275. `,
  276. methods: {
  277. onChange(val) {
  278. this.data = val;
  279. }
  280. },
  281. data() {
  282. return {
  283. data: '',
  284. checked: false
  285. };
  286. }
  287. }, true);
  288. let checkboxElm = vm.$el;
  289. checkboxElm.click();
  290. setTimeout(_ => {
  291. expect(vm.data).to.true;
  292. vm.checked = false;
  293. setTimeout(_ => {
  294. expect(vm.data).to.true;
  295. done();
  296. }, 10);
  297. }, 10);
  298. });
  299. it('checkbox group', done => {
  300. vm = createVue({
  301. template: `
  302. <el-checkbox-group v-model="checkList">
  303. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  304. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  305. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  306. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  307. </el-checkbox-group>
  308. `,
  309. data() {
  310. return {
  311. checkList: []
  312. };
  313. }
  314. }, true);
  315. expect(vm.checkList.length === 0).to.be.true;
  316. vm.$refs.a.$el.click();
  317. vm.$nextTick(_ => {
  318. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  319. vm.$refs.b.$el.click();
  320. vm.$nextTick(_ => {
  321. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  322. expect(vm.checkList.indexOf('b') !== -1).to.be.true;
  323. done();
  324. });
  325. });
  326. });
  327. it('checkbox-button group change event', done => {
  328. vm = createVue({
  329. template: `
  330. <el-checkbox-group v-model="checkList" @change="onChange">
  331. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  332. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  333. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  334. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  335. </el-checkbox-group>
  336. `,
  337. methods: {
  338. onChange(val) {
  339. this.data = val;
  340. }
  341. },
  342. data() {
  343. return {
  344. data: '',
  345. checkList: []
  346. };
  347. }
  348. }, true);
  349. vm.$refs.a.$el.click();
  350. setTimeout(_ => {
  351. expect(vm.data).to.deep.equal(['a']);
  352. vm.checkList = ['b'];
  353. setTimeout(_ => {
  354. expect(vm.data).to.deep.equal(['a']);
  355. done();
  356. }, 10);
  357. }, 10);
  358. });
  359. it('checkbox group props', () => {
  360. vm = createVue({
  361. template: `
  362. <el-checkbox-group v-model="checkList" size="large" fill="#FF0000" text-color="#000">
  363. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  364. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  365. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  366. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  367. </el-checkbox-group>
  368. `,
  369. data() {
  370. return {
  371. checkList: ['a', 'd']
  372. };
  373. }
  374. }, true);
  375. expect(vm.checkList.length === 2).to.be.true;
  376. expect(vm.$refs.a.$el.classList.contains('is-checked')).to.be.true;
  377. expect(vm.$refs.a.$el.classList.contains('el-checkbox-button--large')).to.be.true;
  378. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.backgroundColor).to.be.eql('rgb(255, 0, 0)');
  379. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.boxShadow).to.be.eql('rgb(255, 0, 0) -1px 0px 0px 0px');
  380. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.borderColor).to.be.eql('rgb(255, 0, 0)');
  381. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.color).to.be.eql('rgb(0, 0, 0)');
  382. expect(vm.$refs.b.$el.classList.contains('is-checked')).to.be.false;
  383. expect(vm.$refs.c.$el.classList.contains('is-checked')).to.be.false;
  384. expect(vm.$refs.d.$el.classList.contains('is-checked')).to.be.true;
  385. });
  386. it('checkbox group minimum and maximum', done => {
  387. vm = createVue({
  388. template: `
  389. <el-checkbox-group
  390. v-model="checkList"
  391. :min="1"
  392. :max="2"
  393. >
  394. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  395. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  396. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  397. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  398. </el-checkbox-group>
  399. `,
  400. data() {
  401. return {
  402. checkList: ['a'],
  403. lastEvent: null
  404. };
  405. }
  406. }, true);
  407. expect(vm.checkList.length === 1).to.be.true;
  408. vm.$refs.a.$el.click();
  409. vm.$nextTick(() => {
  410. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  411. vm.$refs.b.$el.click();
  412. vm.$nextTick(() => {
  413. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  414. expect(vm.checkList.indexOf('b') !== -1).to.be.true;
  415. vm.$refs.c.$el.click();
  416. vm.$nextTick(() => {
  417. expect(vm.checkList.indexOf('c') !== -1).to.be.false;
  418. expect(vm.checkList.indexOf('d') !== -1).to.be.false;
  419. done();
  420. });
  421. });
  422. });
  423. });
  424. it('nested group', done => {
  425. vm = createVue({
  426. template: `
  427. <el-checkbox-group v-model="checkList">
  428. <el-row>
  429. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  430. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  431. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  432. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  433. </el-row>
  434. </el-checkbox-group>
  435. `,
  436. data() {
  437. return {
  438. checkList: []
  439. };
  440. }
  441. }, true);
  442. expect(vm.checkList.length === 0).to.be.true;
  443. vm.$refs.a.$el.click();
  444. vm.$nextTick(_ => {
  445. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  446. done();
  447. });
  448. });
  449. it('true false label', done => {
  450. vm = createVue({
  451. template: `
  452. <el-checkbox-button
  453. true-label="a"
  454. :false-label="3"
  455. v-model="checked"
  456. ></el-checkbox-button>
  457. `,
  458. data() {
  459. return {
  460. checked: 'a'
  461. };
  462. }
  463. }, true);
  464. vm.$el.click();
  465. vm.$nextTick(_ => {
  466. expect(vm.checked === 3).to.be.true;
  467. done();
  468. });
  469. });
  470. it('checked', () => {
  471. vm = createVue({
  472. template: `
  473. <div>
  474. <el-checkbox-button v-model="checked" checked></el-checkbox-button>
  475. <el-checkbox-group v-model="checklist">
  476. <el-checkbox-button checked label="a"></el-checkbox-button>
  477. </el-checkbox-group>
  478. </div>
  479. `,
  480. data() {
  481. return {
  482. checked: false,
  483. checklist: []
  484. };
  485. }
  486. }, true);
  487. expect(vm.checked).to.be.true;
  488. expect(vm.checklist.indexOf('a') !== -1).to.be.true;
  489. });
  490. });
  491. });