radio.spec.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  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. vm.$nextTick(_ => {
  23. expect(radioElm.querySelector('.is-checked')).to.be.ok;
  24. done();
  25. });
  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. vm.$nextTick(_ => {
  46. expect(vm.radio === '').to.be.true;
  47. expect(radioElm.querySelector('.is-disabled')).to.be.ok;
  48. done();
  49. });
  50. });
  51. it('change event', done => {
  52. vm = createVue({
  53. template: `
  54. <el-radio
  55. v-model="radio"
  56. label="3"
  57. @change="handleChange"
  58. >
  59. </el-radio>
  60. `,
  61. data() {
  62. return {
  63. radio: '',
  64. data: ''
  65. };
  66. },
  67. methods: {
  68. handleChange(val) {
  69. this.data = val;
  70. }
  71. }
  72. }, true);
  73. let radioElm = vm.$el;
  74. radioElm.click();
  75. setTimeout(_ => {
  76. expect(vm.data).to.equal('3');
  77. done();
  78. }, 10);
  79. });
  80. it('change event only triggers on user input', done => {
  81. vm = createVue({
  82. template: `
  83. <el-radio
  84. v-model="radio"
  85. label="3"
  86. @change="handleChange"
  87. >
  88. </el-radio>
  89. `,
  90. data() {
  91. return {
  92. radio: '',
  93. data: ''
  94. };
  95. },
  96. methods: {
  97. handleChange(val) {
  98. this.data = val;
  99. }
  100. }
  101. }, true);
  102. vm.radio = '3';
  103. setTimeout(_ => {
  104. expect(vm.data).to.equal('');
  105. done();
  106. }, 10);
  107. });
  108. describe('Radio group', () => {
  109. it('create', done => {
  110. vm = createVue({
  111. template: `
  112. <el-radio-group v-model="radio">
  113. <el-radio :label="3" ref="radio1">备选项</el-radio>
  114. <el-radio :label="6" ref="radio2">备选项</el-radio>
  115. <el-radio :label="9">备选项</el-radio>
  116. </el-radio-group>
  117. `,
  118. data() {
  119. return {
  120. radio: 3
  121. };
  122. }
  123. }, true);
  124. setTimeout(_ => {
  125. expect(vm.$refs.radio1.$el.querySelector('.is-checked')).to.be.ok;
  126. let radioElm = vm.$refs.radio2.$el;
  127. radioElm.click();
  128. vm.$nextTick(_ => {
  129. expect(radioElm.querySelector('.is-checked')).to.be.ok;
  130. expect(vm.radio === 6).to.be.true;
  131. done();
  132. });
  133. }, 50);
  134. });
  135. it('disabled', done => {
  136. vm = createVue({
  137. template: `
  138. <el-radio-group v-model="radio" disabled>
  139. <el-radio :label="3" ref="radio1">备选项</el-radio>
  140. <el-radio :label="6" ref="radio2">备选项</el-radio>
  141. <el-radio :label="9">备选项</el-radio>
  142. </el-radio-group>
  143. `,
  144. data() {
  145. return {
  146. radio: 3
  147. };
  148. }
  149. }, true);
  150. let radio2 = vm.$refs.radio2;
  151. expect(vm.$el.querySelectorAll('label.is-disabled').length).to.be.equal(3);
  152. expect(vm.$refs.radio1.$el.querySelector('.is-checked')).to.be.exist;
  153. radio2.$el.click();
  154. vm.$nextTick(_ => {
  155. expect(vm.radio === 3).to.be.true;
  156. expect(vm.$refs.radio1.$el.querySelector('.is-checked')).to.be.exist;
  157. done();
  158. });
  159. });
  160. it('change event', done => {
  161. vm = createVue({
  162. template: `
  163. <el-radio-group v-model="radio" @change="onChange">
  164. <el-radio :label="3">备选项</el-radio>
  165. <el-radio :label="6" ref="radio2">备选项</el-radio>
  166. <el-radio :label="9">备选项</el-radio>
  167. </el-radio-group>
  168. `,
  169. methods: {
  170. onChange(val) {
  171. this.data = val;
  172. }
  173. },
  174. data() {
  175. return {
  176. radio: 3,
  177. data: 0
  178. };
  179. }
  180. }, true);
  181. let radio2 = vm.$refs.radio2;
  182. radio2.$el.click();
  183. setTimeout(_ => {
  184. expect(vm.data).to.equal(6);
  185. done();
  186. }, 10);
  187. });
  188. it('change event only triggers on user input', done => {
  189. vm = createVue({
  190. template: `
  191. <el-radio-group v-model="radio" @change="onChange">
  192. <el-radio :label="3">备选项</el-radio>
  193. <el-radio :label="6">备选项</el-radio>
  194. <el-radio :label="9">备选项</el-radio>
  195. </el-radio-group>
  196. `,
  197. methods: {
  198. onChange(val) {
  199. this.data = val;
  200. }
  201. },
  202. data() {
  203. return {
  204. radio: 3,
  205. data: 0
  206. };
  207. }
  208. }, true);
  209. vm.radio = 6;
  210. setTimeout(_ => {
  211. expect(vm.data).to.equal(0);
  212. done();
  213. }, 10);
  214. });
  215. it('disabled when children is radio button', done => {
  216. vm = createVue({
  217. template: `
  218. <el-radio-group v-model="radio" disabled>
  219. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  220. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  221. <el-radio-button :label="9">备选项</el-radio-button>
  222. </el-radio-group>
  223. `,
  224. data() {
  225. return {
  226. radio: 3
  227. };
  228. }
  229. }, true);
  230. let radio2 = vm.$refs.radio2;
  231. expect(vm.$el.querySelectorAll('.is-disabled').length).to.be.equal(3);
  232. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  233. radio2.$el.click();
  234. vm.$nextTick(_ => {
  235. expect(vm.radio === 3).to.be.true;
  236. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  237. done();
  238. });
  239. });
  240. describe('Radio Button', () => {
  241. it('create', done => {
  242. vm = createVue({
  243. template: `
  244. <el-radio-group v-model="radio">
  245. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  246. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  247. <el-radio-button :label="9">备选项</el-radio-button>
  248. </el-radio-group>
  249. `,
  250. data() {
  251. return {
  252. radio: 3
  253. };
  254. }
  255. }, true);
  256. expect(vm.$refs.radio1.$el.classList.contains('is-active')).to.be.true;
  257. let radio = vm.$refs.radio2;
  258. radio.$el.click();
  259. vm.$nextTick(_ => {
  260. expect(radio.$el.classList.contains('is-active')).to.be.true;
  261. expect(vm.radio === 6).to.be.true;
  262. done();
  263. });
  264. });
  265. it('custom color', done => {
  266. vm = createVue({
  267. template: `
  268. <el-radio-group v-model="radio" fill="#000" text-color="#ff0">
  269. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  270. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  271. <el-radio-button :label="9">备选项</el-radio-button>
  272. </el-radio-group>
  273. `,
  274. data() {
  275. return {
  276. radio: 3
  277. };
  278. }
  279. }, true);
  280. vm.$nextTick(_ => {
  281. expect(vm.$refs.radio1.activeStyle.backgroundColor).to.equal('#000');
  282. expect(vm.$refs.radio1.activeStyle.borderColor).to.equal('#000');
  283. expect(vm.$refs.radio1.activeStyle.color).to.equal('#ff0');
  284. done();
  285. });
  286. });
  287. it('change event', done => {
  288. vm = createVue({
  289. template: `
  290. <el-radio-group v-model="radio" @change="onChange">
  291. <el-radio-button :label="3">备选项</el-radio-button>
  292. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  293. <el-radio-button :label="9">备选项</el-radio-button>
  294. </el-radio-group>
  295. `,
  296. methods: {
  297. onChange(val) {
  298. this.data = val;
  299. }
  300. },
  301. data() {
  302. return {
  303. data: 0,
  304. radio: 3
  305. };
  306. }
  307. }, true);
  308. let radio = vm.$refs.radio2;
  309. radio.$el.click();
  310. setTimeout(_ => {
  311. expect(vm.data).to.equal(6);
  312. done();
  313. }, 10);
  314. });
  315. it('change event only triggers on user input', done => {
  316. vm = createVue({
  317. template: `
  318. <el-radio-group v-model="radio" @change="onChange">
  319. <el-radio-button :label="3">备选项</el-radio-button>
  320. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  321. <el-radio-button :label="9">备选项</el-radio-button>
  322. </el-radio-group>
  323. `,
  324. methods: {
  325. onChange(val) {
  326. this.data = val;
  327. }
  328. },
  329. data() {
  330. return {
  331. data: 0,
  332. radio: 3
  333. };
  334. }
  335. }, true);
  336. vm.radio = 6;
  337. setTimeout(_ => {
  338. expect(vm.data).to.equal(0);
  339. done();
  340. }, 10);
  341. });
  342. it('size', done => {
  343. vm = createVue({
  344. template: `
  345. <el-radio-group v-model="radio" size="large">
  346. <el-radio-button :label="3" ref="radio1">备选项</el-radio-button>
  347. <el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
  348. <el-radio-button :label="9">备选项</el-radio-button>
  349. </el-radio-group>
  350. `,
  351. data() {
  352. return {
  353. radio: 3
  354. };
  355. }
  356. }, true);
  357. vm.$nextTick(_ => {
  358. expect(vm.$el.querySelectorAll('.el-radio-button--large').length).to.be.equal(3);
  359. done();
  360. });
  361. });
  362. });
  363. });
  364. });