radio.spec.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. import { createVue, destroyVM } 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. describe('Radio Button', () => {
  260. it('create', done => {
  261. vm = createVue({
  262. template: `
  263. <el-radio-group v-model="radio">
  264. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  265. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  266. <el-radio-button :label="9">备选项</el-radio-button>
  267. </el-radio-group>
  268. `,
  269. data() {
  270. return {
  271. radio: 3
  272. };
  273. }
  274. }, true);
  275. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  276. let radio = vm.$refs.radio2;
  277. radio.$el.click();
  278. setTimeout(_ => {
  279. expect(radio.$el.classList.contains('is-active')).to.be.true;
  280. expect(vm.radio === 6).to.be.true;
  281. done();
  282. }, 10);
  283. });
  284. it('custom color', done => {
  285. vm = createVue({
  286. template: `
  287. <el-radio-group v-model="radio" fill="#000" text-color="#ff0">
  288. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  289. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  290. <el-radio-button :label="9">备选项</el-radio-button>
  291. </el-radio-group>
  292. `,
  293. data() {
  294. return {
  295. radio: 3
  296. };
  297. }
  298. }, true);
  299. setTimeout(_ => {
  300. expect(vm.$refs.radio1.activeStyle.backgroundColor).to.equal('#000');
  301. expect(vm.$refs.radio1.activeStyle.borderColor).to.equal('#000');
  302. expect(vm.$refs.radio1.activeStyle.color).to.equal('#ff0');
  303. done();
  304. }, 10);
  305. });
  306. it('change event', done => {
  307. vm = createVue({
  308. template: `
  309. <el-radio-group v-model="radio" @change="onChange">
  310. <el-radio-button :label="3">备选项</el-radio-button>
  311. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  312. <el-radio-button :label="9">备选项</el-radio-button>
  313. </el-radio-group>
  314. `,
  315. methods: {
  316. onChange(val) {
  317. this.data = val;
  318. }
  319. },
  320. data() {
  321. return {
  322. data: 0,
  323. radio: 3
  324. };
  325. }
  326. }, true);
  327. let radio = vm.$refs.radio2;
  328. radio.$el.click();
  329. setTimeout(_ => {
  330. expect(vm.data).to.equal(6);
  331. done();
  332. }, 10);
  333. });
  334. it('change event only triggers on user input', done => {
  335. vm = createVue({
  336. template: `
  337. <el-radio-group v-model="radio" @change="onChange">
  338. <el-radio-button :label="3">备选项</el-radio-button>
  339. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  340. <el-radio-button :label="9">备选项</el-radio-button>
  341. </el-radio-group>
  342. `,
  343. methods: {
  344. onChange(val) {
  345. this.data = val;
  346. }
  347. },
  348. data() {
  349. return {
  350. data: 0,
  351. radio: 3
  352. };
  353. }
  354. }, true);
  355. vm.radio = 6;
  356. setTimeout(_ => {
  357. expect(vm.data).to.equal(0);
  358. done();
  359. }, 10);
  360. });
  361. it('size', done => {
  362. vm = createVue({
  363. template: `
  364. <el-radio-group v-model="radio" size="large">
  365. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  366. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  367. <el-radio-button :label="9">备选项</el-radio-button>
  368. </el-radio-group>
  369. `,
  370. data() {
  371. return {
  372. radio: 3
  373. };
  374. }
  375. }, true);
  376. setTimeout(_ => {
  377. expect(vm.$el.querySelectorAll('.el-radio-button--large').length).to.be.equal(3);
  378. done();
  379. }, 10);
  380. });
  381. });
  382. });
  383. });