checkbox.spec.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  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. vm.$refs.a.$el.click();
  147. vm.$nextTick(() => {
  148. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  149. vm.$refs.b.$el.click();
  150. vm.$nextTick(() => {
  151. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  152. expect(vm.checkList.indexOf('b') !== -1).to.be.true;
  153. vm.$refs.c.$el.click();
  154. vm.$nextTick(() => {
  155. expect(vm.checkList.indexOf('c') !== -1).to.be.false;
  156. expect(vm.checkList.indexOf('d') !== -1).to.be.false;
  157. done();
  158. });
  159. });
  160. });
  161. });
  162. it('nested group', done => {
  163. vm = createVue({
  164. template: `
  165. <el-checkbox-group v-model="checkList">
  166. <el-row>
  167. <el-checkbox label="a" ref="a"></el-checkbox>
  168. <el-checkbox label="b" ref="b"></el-checkbox>
  169. <el-checkbox label="c" ref="c"></el-checkbox>
  170. <el-checkbox label="d" ref="d"></el-checkbox>
  171. </el-row>
  172. </el-checkbox-group>
  173. `,
  174. data() {
  175. return {
  176. checkList: []
  177. };
  178. }
  179. }, true);
  180. expect(vm.checkList.length === 0).to.be.true;
  181. vm.$refs.a.$el.click();
  182. vm.$nextTick(_ => {
  183. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  184. done();
  185. });
  186. });
  187. it('true false label', done => {
  188. vm = createVue({
  189. template: `
  190. <el-checkbox true-label="a" :false-label="3" v-model="checked"></el-checkbox>
  191. `,
  192. data() {
  193. return {
  194. checked: 'a'
  195. };
  196. }
  197. }, true);
  198. vm.$el.click();
  199. vm.$nextTick(_ => {
  200. expect(vm.checked === 3).to.be.true;
  201. done();
  202. });
  203. });
  204. it('checked', () => {
  205. vm = createVue({
  206. template: `
  207. <div>
  208. <el-checkbox v-model="checked" checked></el-checkbox>
  209. <el-checkbox-group v-model="checklist">
  210. <el-checkbox checked label="a"></el-checkbox>
  211. </el-checkbox-group>
  212. </div>
  213. `,
  214. data() {
  215. return {
  216. checked: false,
  217. checklist: []
  218. };
  219. }
  220. }, true);
  221. expect(vm.checked).to.be.true;
  222. expect(vm.checklist.indexOf('a') !== -1).to.be.true;
  223. });
  224. describe('checkbox-button', () => {
  225. let vm;
  226. afterEach(() => {
  227. destroyVM(vm);
  228. });
  229. it('create', done => {
  230. vm = createVue({
  231. template: `
  232. <el-checkbox-button v-model="checked">
  233. </el-checkbox-button>
  234. `,
  235. data() {
  236. return {
  237. checked: false
  238. };
  239. }
  240. }, true);
  241. let checkboxElm = vm.$el;
  242. expect(checkboxElm.classList.contains('el-checkbox-button')).to.be.true;
  243. checkboxElm.click();
  244. vm.$nextTick(_ => {
  245. expect(checkboxElm.classList.contains('is-checked')).to.be.ok;
  246. done();
  247. });
  248. });
  249. it('disabled', () => {
  250. vm = createVue({
  251. template: `
  252. <el-checkbox-button
  253. v-model="checked"
  254. disabled
  255. >
  256. </el-checkbox-button>
  257. `,
  258. data() {
  259. return {
  260. checked: false
  261. };
  262. }
  263. }, true);
  264. let checkboxElm = vm.$el;
  265. expect(checkboxElm.classList.contains('is-disabled')).to.be.ok;
  266. });
  267. it('change event', done => {
  268. vm = createVue({
  269. template: `
  270. <el-checkbox-button v-model="checked" @change="onChange">
  271. </el-checkbox-button>
  272. `,
  273. methods: {
  274. onChange(val) {
  275. this.data = val;
  276. }
  277. },
  278. data() {
  279. return {
  280. data: '',
  281. checked: false
  282. };
  283. }
  284. }, true);
  285. let checkboxElm = vm.$el;
  286. checkboxElm.click();
  287. setTimeout(_ => {
  288. expect(vm.data).to.true;
  289. vm.checked = false;
  290. setTimeout(_ => {
  291. expect(vm.data).to.true;
  292. done();
  293. }, 10);
  294. }, 10);
  295. });
  296. it('checkbox group', done => {
  297. vm = createVue({
  298. template: `
  299. <el-checkbox-group v-model="checkList">
  300. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  301. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  302. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  303. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  304. </el-checkbox-group>
  305. `,
  306. data() {
  307. return {
  308. checkList: []
  309. };
  310. }
  311. }, true);
  312. expect(vm.checkList.length === 0).to.be.true;
  313. vm.$refs.a.$el.click();
  314. vm.$nextTick(_ => {
  315. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  316. vm.$refs.b.$el.click();
  317. vm.$nextTick(_ => {
  318. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  319. expect(vm.checkList.indexOf('b') !== -1).to.be.true;
  320. done();
  321. });
  322. });
  323. });
  324. it('checkbox-button group change event', done => {
  325. vm = createVue({
  326. template: `
  327. <el-checkbox-group v-model="checkList" @change="onChange">
  328. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  329. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  330. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  331. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  332. </el-checkbox-group>
  333. `,
  334. methods: {
  335. onChange(val) {
  336. this.data = val;
  337. }
  338. },
  339. data() {
  340. return {
  341. data: '',
  342. checkList: []
  343. };
  344. }
  345. }, true);
  346. vm.$refs.a.$el.click();
  347. setTimeout(_ => {
  348. expect(vm.data).to.deep.equal(['a']);
  349. vm.checkList = ['b'];
  350. setTimeout(_ => {
  351. expect(vm.data).to.deep.equal(['a']);
  352. done();
  353. }, 10);
  354. }, 10);
  355. });
  356. it('checkbox group props', () => {
  357. vm = createVue({
  358. template: `
  359. <el-checkbox-group v-model="checkList" size="large" fill="#FF0000" text-color="#000">
  360. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  361. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  362. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  363. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  364. </el-checkbox-group>
  365. `,
  366. data() {
  367. return {
  368. checkList: ['a', 'd']
  369. };
  370. }
  371. }, true);
  372. expect(vm.checkList.length === 2).to.be.true;
  373. expect(vm.$refs.a.$el.classList.contains('is-checked')).to.be.true;
  374. expect(vm.$refs.a.$el.classList.contains('el-checkbox-button--large')).to.be.true;
  375. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.backgroundColor).to.be.eql('rgb(255, 0, 0)');
  376. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.boxShadow).to.be.eql('rgb(255, 0, 0) -1px 0px 0px 0px');
  377. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.borderColor).to.be.eql('rgb(255, 0, 0)');
  378. expect(vm.$refs.a.$el.querySelector('.el-checkbox-button__inner').style.color).to.be.eql('rgb(0, 0, 0)');
  379. expect(vm.$refs.b.$el.classList.contains('is-checked')).to.be.false;
  380. expect(vm.$refs.c.$el.classList.contains('is-checked')).to.be.false;
  381. expect(vm.$refs.d.$el.classList.contains('is-checked')).to.be.true;
  382. });
  383. it('checkbox group minimum and maximum', done => {
  384. vm = createVue({
  385. template: `
  386. <el-checkbox-group
  387. v-model="checkList"
  388. :min="1"
  389. :max="2"
  390. >
  391. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  392. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  393. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  394. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  395. </el-checkbox-group>
  396. `,
  397. data() {
  398. return {
  399. checkList: ['a'],
  400. lastEvent: null
  401. };
  402. }
  403. }, true);
  404. expect(vm.checkList.length === 1).to.be.true;
  405. vm.$refs.a.$el.click();
  406. vm.$nextTick(() => {
  407. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  408. vm.$refs.b.$el.click();
  409. vm.$nextTick(() => {
  410. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  411. expect(vm.checkList.indexOf('b') !== -1).to.be.true;
  412. vm.$refs.c.$el.click();
  413. vm.$nextTick(() => {
  414. expect(vm.checkList.indexOf('c') !== -1).to.be.false;
  415. expect(vm.checkList.indexOf('d') !== -1).to.be.false;
  416. done();
  417. });
  418. });
  419. });
  420. });
  421. it('nested group', done => {
  422. vm = createVue({
  423. template: `
  424. <el-checkbox-group v-model="checkList">
  425. <el-row>
  426. <el-checkbox-button label="a" ref="a"></el-checkbox-button>
  427. <el-checkbox-button label="b" ref="b"></el-checkbox-button>
  428. <el-checkbox-button label="c" ref="c"></el-checkbox-button>
  429. <el-checkbox-button label="d" ref="d"></el-checkbox-button>
  430. </el-row>
  431. </el-checkbox-group>
  432. `,
  433. data() {
  434. return {
  435. checkList: []
  436. };
  437. }
  438. }, true);
  439. expect(vm.checkList.length === 0).to.be.true;
  440. vm.$refs.a.$el.click();
  441. vm.$nextTick(_ => {
  442. expect(vm.checkList.indexOf('a') !== -1).to.be.true;
  443. done();
  444. });
  445. });
  446. it('true false label', done => {
  447. vm = createVue({
  448. template: `
  449. <el-checkbox-button
  450. true-label="a"
  451. :false-label="3"
  452. v-model="checked"
  453. ></el-checkbox-button>
  454. `,
  455. data() {
  456. return {
  457. checked: 'a'
  458. };
  459. }
  460. }, true);
  461. vm.$el.click();
  462. vm.$nextTick(_ => {
  463. expect(vm.checked === 3).to.be.true;
  464. done();
  465. });
  466. });
  467. it('checked', () => {
  468. vm = createVue({
  469. template: `
  470. <div>
  471. <el-checkbox-button v-model="checked" checked></el-checkbox-button>
  472. <el-checkbox-group v-model="checklist">
  473. <el-checkbox-button checked label="a"></el-checkbox-button>
  474. </el-checkbox-group>
  475. </div>
  476. `,
  477. data() {
  478. return {
  479. checked: false,
  480. checklist: []
  481. };
  482. }
  483. }, true);
  484. expect(vm.checked).to.be.true;
  485. expect(vm.checklist.indexOf('a') !== -1).to.be.true;
  486. });
  487. });
  488. });