switch.spec.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import { createTest, createVue, destroyVM } from '../util';
  2. import Switch from 'packages/switch';
  3. import Vue from 'vue';
  4. describe('Switch', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('create', () => {
  10. vm = createTest(Switch, {
  11. activeText: 'on',
  12. inactiveText: 'off',
  13. activeColor: '#0f0',
  14. inactiveColor: '#f00',
  15. width: 100
  16. });
  17. const core = vm.$el.querySelector('.el-switch__core');
  18. expect(core.style.backgroundColor).to.equal('rgb(255, 0, 0)');
  19. expect(core.style.width).to.equal('100px');
  20. expect(vm.$el.querySelector('.el-switch__label--left').querySelector('span').textContent).to.equal('off');
  21. });
  22. it('switch with icons', () => {
  23. vm = createTest(Switch, {
  24. activeIconClass: 'el-icon-check',
  25. inactiveIconClass: 'el-icon-close'
  26. });
  27. const icon = vm.$el.querySelector('.el-switch__label--left').querySelector('i');
  28. expect(icon.classList.contains('el-icon-close')).to.true;
  29. });
  30. it('value correctly update', done => {
  31. vm = createVue({
  32. template: `
  33. <div>
  34. <el-switch
  35. v-model="value"
  36. activeColor="#0f0"
  37. inactiveColor="#f00">
  38. </el-switch>
  39. </div>
  40. `,
  41. data() {
  42. return {
  43. value: true
  44. };
  45. }
  46. }, true);
  47. const core = vm.$el.querySelector('.el-switch__core');
  48. expect(core.style.backgroundColor).to.equal('rgb(0, 255, 0)');
  49. core.click();
  50. setTimeout(() => {
  51. expect(core.style.backgroundColor).to.equal('rgb(255, 0, 0)');
  52. expect(vm.value).to.equal(false);
  53. core.click();
  54. setTimeout(() => {
  55. expect(vm.value).to.equal(true);
  56. done();
  57. }, 10);
  58. }, 10);
  59. });
  60. it('change event', done => {
  61. vm = createVue({
  62. template: `
  63. <div>
  64. <el-switch
  65. v-model="value"
  66. @change="handleChange">
  67. </el-switch>
  68. </div>
  69. `,
  70. mounted() {
  71. setTimeout(() => {
  72. this.value = false;
  73. }, 10);
  74. },
  75. methods: {
  76. handleChange(val) {
  77. this.target = val;
  78. }
  79. },
  80. data() {
  81. return {
  82. target: 1,
  83. value: true
  84. };
  85. }
  86. }, true);
  87. setTimeout(() => {
  88. const core = vm.$el.querySelector('.el-switch__core');
  89. expect(vm.target).to.equal(1);
  90. core.click();
  91. setTimeout(() => {
  92. expect(vm.target).to.equal(true);
  93. done();
  94. }, 10);
  95. }, 50);
  96. });
  97. it('disabled switch should not respond to user click', done => {
  98. vm = createVue({
  99. template: `
  100. <div>
  101. <el-switch disabled v-model="value"></el-switch>
  102. </div>
  103. `,
  104. data() {
  105. return {
  106. value: true
  107. };
  108. }
  109. }, true);
  110. vm.$el.querySelector('.el-switch__core').click();
  111. Vue.nextTick(() => {
  112. expect(vm.value).to.true;
  113. done();
  114. });
  115. });
  116. it('expand switch value', done => {
  117. vm = createVue({
  118. template: `
  119. <div>
  120. <el-switch v-model="value" :active-value="onValue" :inactive-value="offValue"></el-switch>
  121. </div>
  122. `,
  123. data() {
  124. return {
  125. value: '100',
  126. onValue: '100',
  127. offValue: '0'
  128. };
  129. }
  130. }, true);
  131. const core = vm.$el.querySelector('.el-switch__core');
  132. core.click();
  133. setTimeout(() => {
  134. expect(vm.value).to.equal('0');
  135. core.click();
  136. setTimeout(() => {
  137. expect(vm.value).to.equal('100');
  138. done();
  139. }, 10);
  140. }, 10);
  141. });
  142. it('value is the single source of truth', done => {
  143. vm = createVue({
  144. template: `
  145. <div>
  146. <el-switch :value="true"></el-switch>
  147. </div>
  148. `
  149. }, true);
  150. const component = vm.$children[0];
  151. const input = vm.$el.querySelector('input');
  152. const core = vm.$el.querySelector('.el-switch__core');
  153. core.click();
  154. setTimeout(() => {
  155. expect(component.checked).to.equal(true);
  156. expect(component.$el.classList.contains('is-checked')).to.equal(true);
  157. expect(input.checked).to.equal(true);
  158. core.click();
  159. setTimeout(() => {
  160. expect(component.checked).to.equal(true);
  161. expect(component.$el.classList.contains('is-checked')).to.equal(true);
  162. expect(input.checked).to.equal(true);
  163. done();
  164. }, 10);
  165. }, 10);
  166. });
  167. it('sets checkbox value', done => {
  168. vm = createVue({
  169. template: `
  170. <div>
  171. <el-switch v-model="value"></el-switch>
  172. </div>
  173. `,
  174. data() {
  175. return {
  176. value: false
  177. };
  178. }
  179. }, true);
  180. vm.value = true;
  181. setTimeout(() => {
  182. expect(vm.$el.querySelector('input').checked).to.equal(true);
  183. vm.value = false;
  184. setTimeout(() => {
  185. expect(vm.$el.querySelector('input').checked).to.equal(false);
  186. done();
  187. }, 10);
  188. }, 10);
  189. });
  190. });