switch.spec.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  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 v-model="value"></el-switch>
  35. </div>
  36. `,
  37. data() {
  38. return {
  39. value: true
  40. };
  41. }
  42. }, true);
  43. const core = vm.$el.querySelector('.el-switch__core');
  44. core.click();
  45. setTimeout(() => {
  46. expect(vm.value).to.equal(false);
  47. core.click();
  48. setTimeout(() => {
  49. expect(vm.value).to.equal(true);
  50. done();
  51. }, 10);
  52. }, 10);
  53. });
  54. it('change event', done => {
  55. vm = createVue({
  56. template: `
  57. <div>
  58. <el-switch
  59. v-model="value"
  60. @change="handleChange">
  61. </el-switch>
  62. </div>
  63. `,
  64. mounted() {
  65. setTimeout(() => {
  66. this.value = false;
  67. }, 10);
  68. },
  69. methods: {
  70. handleChange(val) {
  71. this.target = val;
  72. }
  73. },
  74. data() {
  75. return {
  76. target: 1,
  77. value: true
  78. };
  79. }
  80. }, true);
  81. setTimeout(() => {
  82. const core = vm.$el.querySelector('.el-switch__core');
  83. expect(vm.target).to.equal(1);
  84. core.click();
  85. setTimeout(() => {
  86. expect(vm.target).to.equal(true);
  87. done();
  88. }, 10);
  89. }, 50);
  90. });
  91. it('disabled switch should not respond to user click', done => {
  92. vm = createVue({
  93. template: `
  94. <div>
  95. <el-switch disabled v-model="value"></el-switch>
  96. </div>
  97. `,
  98. data() {
  99. return {
  100. value: true
  101. };
  102. }
  103. }, true);
  104. vm.$el.querySelector('.el-switch__core').click();
  105. Vue.nextTick(() => {
  106. expect(vm.value).to.true;
  107. done();
  108. });
  109. });
  110. it('expand switch value', done => {
  111. vm = createVue({
  112. template: `
  113. <div>
  114. <el-switch v-model="value" :active-value="onValue" :inactive-value="offValue"></el-switch>
  115. </div>
  116. `,
  117. data() {
  118. return {
  119. value: '100',
  120. onValue: '100',
  121. offValue: '0'
  122. };
  123. }
  124. }, true);
  125. const core = vm.$el.querySelector('.el-switch__core');
  126. core.click();
  127. setTimeout(() => {
  128. expect(vm.value).to.equal('0');
  129. core.click();
  130. setTimeout(() => {
  131. expect(vm.value).to.equal('100');
  132. done();
  133. }, 10);
  134. }, 10);
  135. });
  136. it('value is the single source of truth', done => {
  137. vm = createVue({
  138. template: `
  139. <div>
  140. <el-switch :value="true"></el-switch>
  141. </div>
  142. `
  143. }, true);
  144. const component = vm.$children[0];
  145. const input = vm.$el.querySelector('input');
  146. const core = vm.$el.querySelector('.el-switch__core');
  147. core.click();
  148. setTimeout(() => {
  149. expect(component.checked).to.equal(true);
  150. expect(component.$el.classList.contains('is-checked')).to.equal(true);
  151. expect(input.checked).to.equal(true);
  152. core.click();
  153. setTimeout(() => {
  154. expect(component.checked).to.equal(true);
  155. expect(component.$el.classList.contains('is-checked')).to.equal(true);
  156. expect(input.checked).to.equal(true);
  157. done();
  158. }, 10);
  159. }, 10);
  160. });
  161. it('sets checkbox value', done => {
  162. vm = createVue({
  163. template: `
  164. <div>
  165. <el-switch v-model="value"></el-switch>
  166. </div>
  167. `,
  168. data() {
  169. return {
  170. value: false
  171. };
  172. }
  173. }, true);
  174. vm.value = true;
  175. setTimeout(() => {
  176. expect(vm.$el.querySelector('input').checked).to.equal(true);
  177. vm.value = false;
  178. setTimeout(() => {
  179. expect(vm.$el.querySelector('input').checked).to.equal(false);
  180. done();
  181. }, 10);
  182. }, 10);
  183. });
  184. });