radio.spec.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. import { createVue, destroyVM, triggerKeyDown } from '../util';
  2. describe('Radio', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', done => {
  8. vm = createVue({
  9. template: `
  10. <el-radio v-model="radio" label="a">
  11. </el-radio>
  12. `,
  13. data() {
  14. return {
  15. radio: ''
  16. };
  17. }
  18. }, true);
  19. let radioElm = vm.$el;
  20. expect(radioElm.classList.contains('el-radio')).to.be.true;
  21. radioElm.click();
  22. setTimeout(_ => {
  23. expect(radioElm.querySelector('.is-checked')).to.be.ok;
  24. done();
  25. }, 10);
  26. });
  27. it('disabled', done => {
  28. vm = createVue({
  29. template: `
  30. <el-radio
  31. v-model="radio"
  32. label="3"
  33. disabled
  34. >
  35. </el-radio>
  36. `,
  37. data() {
  38. return {
  39. radio: ''
  40. };
  41. }
  42. }, true);
  43. let radioElm = vm.$el;
  44. radioElm.click();
  45. setTimeout(_ => {
  46. expect(vm.radio === '').to.be.true;
  47. expect(radioElm.querySelector('.is-disabled')).to.be.ok;
  48. done();
  49. }, 10);
  50. });
  51. it('border', () => {
  52. vm = createVue({
  53. template: `
  54. <el-radio
  55. v-model="radio"
  56. label="3"
  57. border
  58. >
  59. </el-radio>
  60. `,
  61. data() {
  62. return {
  63. radio: ''
  64. };
  65. }
  66. }, true);
  67. let radioElm = vm.$el;
  68. expect(radioElm.classList.contains('is-bordered')).to.be.true;
  69. });
  70. it('change event', done => {
  71. vm = createVue({
  72. template: `
  73. <el-radio
  74. v-model="radio"
  75. label="3"
  76. @change="handleChange"
  77. >
  78. </el-radio>
  79. `,
  80. data() {
  81. return {
  82. radio: '',
  83. data: ''
  84. };
  85. },
  86. methods: {
  87. handleChange(val) {
  88. this.data = val;
  89. }
  90. }
  91. }, true);
  92. let radioElm = vm.$el;
  93. radioElm.click();
  94. setTimeout(_ => {
  95. expect(vm.data).to.equal('3');
  96. done();
  97. }, 10);
  98. });
  99. it('change event only triggers on user input', done => {
  100. vm = createVue({
  101. template: `
  102. <el-radio
  103. v-model="radio"
  104. label="3"
  105. @change="handleChange"
  106. >
  107. </el-radio>
  108. `,
  109. data() {
  110. return {
  111. radio: '',
  112. data: ''
  113. };
  114. },
  115. methods: {
  116. handleChange(val) {
  117. this.data = val;
  118. }
  119. }
  120. }, true);
  121. vm.radio = '3';
  122. setTimeout(_ => {
  123. expect(vm.data).to.equal('');
  124. done();
  125. }, 10);
  126. });
  127. describe('Radio group', () => {
  128. it('create', done => {
  129. vm = createVue({
  130. template: `
  131. <el-radio-group v-model="radio">
  132. <el-radio :label="3" ref="radio1">备选项</el-radio>
  133. <el-radio :label="6" ref="radio2">备选项</el-radio>
  134. <el-radio :label="9">备选项</el-radio>
  135. </el-radio-group>
  136. `,
  137. data() {
  138. return {
  139. radio: 3
  140. };
  141. }
  142. }, true);
  143. setTimeout(_ => {
  144. expect(vm.$refs.radio1.$el.querySelector('.is-checked')).to.be.ok;
  145. let radioElm = vm.$refs.radio2.$el;
  146. radioElm.click();
  147. setTimeout(_ => {
  148. expect(radioElm.querySelector('.is-checked')).to.be.ok;
  149. expect(vm.radio === 6).to.be.true;
  150. done();
  151. }, 10);
  152. }, 50);
  153. });
  154. it('disabled', done => {
  155. vm = createVue({
  156. template: `
  157. <el-radio-group v-model="radio" disabled>
  158. <el-radio :label="3" ref="radio1">备选项</el-radio>
  159. <el-radio :label="6" ref="radio2">备选项</el-radio>
  160. <el-radio :label="9">备选项</el-radio>
  161. </el-radio-group>
  162. `,
  163. data() {
  164. return {
  165. radio: 3
  166. };
  167. }
  168. }, true);
  169. let radio2 = vm.$refs.radio2;
  170. expect(vm.$el.querySelectorAll('label.is-disabled').length).to.be.equal(3);
  171. expect(vm.$refs.radio1.$el.querySelector('.is-checked')).to.be.exist;
  172. radio2.$el.click();
  173. setTimeout(_ => {
  174. expect(vm.radio === 3).to.be.true;
  175. expect(vm.$refs.radio1.$el.querySelector('.is-checked')).to.be.exist;
  176. done();
  177. }, 10);
  178. });
  179. it('change event', done => {
  180. vm = createVue({
  181. template: `
  182. <el-radio-group v-model="radio" @change="onChange">
  183. <el-radio :label="3">备选项</el-radio>
  184. <el-radio :label="6" ref="radio2">备选项</el-radio>
  185. <el-radio :label="9">备选项</el-radio>
  186. </el-radio-group>
  187. `,
  188. methods: {
  189. onChange(val) {
  190. this.data = val;
  191. }
  192. },
  193. data() {
  194. return {
  195. radio: 3,
  196. data: 0
  197. };
  198. }
  199. }, true);
  200. let radio2 = vm.$refs.radio2;
  201. radio2.$el.click();
  202. setTimeout(_ => {
  203. expect(vm.data).to.equal(6);
  204. done();
  205. }, 10);
  206. });
  207. it('change event only triggers on user input', done => {
  208. vm = createVue({
  209. template: `
  210. <el-radio-group v-model="radio" @change="onChange">
  211. <el-radio :label="3">备选项</el-radio>
  212. <el-radio :label="6">备选项</el-radio>
  213. <el-radio :label="9">备选项</el-radio>
  214. </el-radio-group>
  215. `,
  216. methods: {
  217. onChange(val) {
  218. this.data = val;
  219. }
  220. },
  221. data() {
  222. return {
  223. radio: 3,
  224. data: 0
  225. };
  226. }
  227. }, true);
  228. vm.radio = 6;
  229. setTimeout(_ => {
  230. expect(vm.data).to.equal(0);
  231. done();
  232. }, 10);
  233. });
  234. it('disabled when children is radio button', done => {
  235. vm = createVue({
  236. template: `
  237. <el-radio-group v-model="radio" disabled>
  238. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  239. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  240. <el-radio-button :label="9">备选项</el-radio-button>
  241. </el-radio-group>
  242. `,
  243. data() {
  244. return {
  245. radio: 3
  246. };
  247. }
  248. }, true);
  249. let radio2 = vm.$refs.radio2;
  250. expect(vm.$el.querySelectorAll('.is-disabled').length).to.be.equal(3);
  251. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  252. radio2.$el.click();
  253. setTimeout(_ => {
  254. expect(vm.radio === 3).to.be.true;
  255. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  256. done();
  257. }, 10);
  258. });
  259. it('keyboard event', done => {
  260. vm = createVue({
  261. template: `
  262. <el-radio-group v-model="radio">
  263. <el-radio-button ref="radio1" :label="3">备选项</el-radio-button>
  264. <el-radio-button ref="radio2" :label="6">备选项</el-radio-button>
  265. <el-radio-button ref="radio3" :label="9">备选项</el-radio-button>
  266. </el-radio-group>
  267. `,
  268. data() {
  269. return {
  270. radio: 6
  271. };
  272. }
  273. }, true);
  274. expect(vm.radio).to.be.equal(6);
  275. vm.$nextTick(() => {
  276. triggerKeyDown(vm.$refs.radio2.$el, 37);
  277. expect(vm.radio).to.be.equal(3);
  278. triggerKeyDown(vm.$refs.radio1.$el, 37);
  279. expect(vm.radio).to.be.equal(9);
  280. vm.$nextTick(() => {
  281. triggerKeyDown(vm.$refs.radio3.$el, 39);
  282. expect(vm.radio).to.be.equal(3);
  283. triggerKeyDown(vm.$refs.radio1.$el, 39);
  284. expect(vm.radio).to.be.equal(6);
  285. vm.$nextTick(() => {
  286. triggerKeyDown(vm.$refs.radio1.$el, 13);
  287. expect(vm.radio).to.be.equal(6);
  288. done();
  289. });
  290. });
  291. });
  292. });
  293. describe('Radio Button', () => {
  294. it('create', done => {
  295. vm = createVue({
  296. template: `
  297. <el-radio-group v-model="radio">
  298. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  299. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  300. <el-radio-button :label="9">备选项</el-radio-button>
  301. </el-radio-group>
  302. `,
  303. data() {
  304. return {
  305. radio: 3
  306. };
  307. }
  308. }, true);
  309. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  310. let radio = vm.$refs.radio2;
  311. radio.$el.click();
  312. setTimeout(_ => {
  313. expect(radio.$el.classList.contains('is-active')).to.be.true;
  314. expect(vm.radio === 6).to.be.true;
  315. done();
  316. }, 10);
  317. });
  318. it('custom color', done => {
  319. vm = createVue({
  320. template: `
  321. <el-radio-group v-model="radio" fill="#000" text-color="#ff0">
  322. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  323. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  324. <el-radio-button :label="9">备选项</el-radio-button>
  325. </el-radio-group>
  326. `,
  327. data() {
  328. return {
  329. radio: 3
  330. };
  331. }
  332. }, true);
  333. setTimeout(_ => {
  334. expect(vm.$refs.radio1.activeStyle.backgroundColor).to.equal('#000');
  335. expect(vm.$refs.radio1.activeStyle.borderColor).to.equal('#000');
  336. expect(vm.$refs.radio1.activeStyle.color).to.equal('#ff0');
  337. done();
  338. }, 10);
  339. });
  340. it('change event', done => {
  341. vm = createVue({
  342. template: `
  343. <el-radio-group v-model="radio" @change="onChange">
  344. <el-radio-button :label="3">备选项</el-radio-button>
  345. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  346. <el-radio-button :label="9">备选项</el-radio-button>
  347. </el-radio-group>
  348. `,
  349. methods: {
  350. onChange(val) {
  351. this.data = val;
  352. }
  353. },
  354. data() {
  355. return {
  356. data: 0,
  357. radio: 3
  358. };
  359. }
  360. }, true);
  361. let radio = vm.$refs.radio2;
  362. radio.$el.click();
  363. setTimeout(_ => {
  364. expect(vm.data).to.equal(6);
  365. done();
  366. }, 10);
  367. });
  368. it('change event only triggers on user input', done => {
  369. vm = createVue({
  370. template: `
  371. <el-radio-group v-model="radio" @change="onChange">
  372. <el-radio-button :label="3">备选项</el-radio-button>
  373. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  374. <el-radio-button :label="9">备选项</el-radio-button>
  375. </el-radio-group>
  376. `,
  377. methods: {
  378. onChange(val) {
  379. this.data = val;
  380. }
  381. },
  382. data() {
  383. return {
  384. data: 0,
  385. radio: 3
  386. };
  387. }
  388. }, true);
  389. vm.radio = 6;
  390. setTimeout(_ => {
  391. expect(vm.data).to.equal(0);
  392. done();
  393. }, 10);
  394. });
  395. it('size', done => {
  396. vm = createVue({
  397. template: `
  398. <el-radio-group v-model="radio" size="large">
  399. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  400. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  401. <el-radio-button :label="9">备选项</el-radio-button>
  402. </el-radio-group>
  403. `,
  404. data() {
  405. return {
  406. radio: 3
  407. };
  408. }
  409. }, true);
  410. setTimeout(_ => {
  411. expect(vm.$el.querySelectorAll('.el-radio-button--large').length).to.be.equal(3);
  412. done();
  413. }, 10);
  414. });
  415. });
  416. });
  417. });