import { createTest, createVue, destroyVM } from '../util';
import Switch from 'packages/switch';
import Vue from 'vue';
describe('Switch', () => {
let vm;
afterEach(() => {
destroyVM(vm);
});
it('create', () => {
vm = createTest(Switch, {
activeText: 'on',
inactiveText: 'off',
activeColor: '#0f0',
inactiveColor: '#f00',
width: 100
});
const core = vm.$el.querySelector('.el-switch__core');
expect(core.style.backgroundColor).to.equal('rgb(255, 0, 0)');
expect(core.style.width).to.equal('100px');
expect(vm.$el.querySelector('.el-switch__label--left').querySelector('span').textContent).to.equal('off');
});
it('switch with icons', () => {
vm = createTest(Switch, {
activeIconClass: 'el-icon-check',
inactiveIconClass: 'el-icon-close'
});
const icon = vm.$el.querySelector('.el-switch__label--left').querySelector('i');
expect(icon.classList.contains('el-icon-close')).to.true;
});
it('value correctly update', done => {
vm = createVue({
template: `
`,
data() {
return {
value: true
};
}
}, true);
const core = vm.$el.querySelector('.el-switch__core');
expect(core.style.backgroundColor).to.equal('rgb(0, 255, 0)');
core.click();
setTimeout(() => {
expect(core.style.backgroundColor).to.equal('rgb(255, 0, 0)');
expect(vm.value).to.equal(false);
core.click();
setTimeout(() => {
expect(vm.value).to.equal(true);
done();
}, 10);
}, 10);
});
it('change event', done => {
vm = createVue({
template: `
`,
mounted() {
setTimeout(() => {
this.value = false;
}, 10);
},
methods: {
handleChange(val) {
this.target = val;
}
},
data() {
return {
target: 1,
value: true
};
}
}, true);
setTimeout(() => {
const core = vm.$el.querySelector('.el-switch__core');
expect(vm.target).to.equal(1);
core.click();
setTimeout(() => {
expect(vm.target).to.equal(true);
done();
}, 10);
}, 50);
});
it('disabled switch should not respond to user click', done => {
vm = createVue({
template: `
`,
data() {
return {
value: true
};
}
}, true);
vm.$el.querySelector('.el-switch__core').click();
Vue.nextTick(() => {
expect(vm.value).to.true;
done();
});
});
it('expand switch value', done => {
vm = createVue({
template: `
`,
data() {
return {
value: '100',
onValue: '100',
offValue: '0'
};
}
}, true);
const core = vm.$el.querySelector('.el-switch__core');
core.click();
setTimeout(() => {
expect(vm.value).to.equal('0');
core.click();
setTimeout(() => {
expect(vm.value).to.equal('100');
done();
}, 10);
}, 10);
});
it('value is the single source of truth', done => {
vm = createVue({
template: `
`
}, true);
const component = vm.$children[0];
const input = vm.$el.querySelector('input');
const core = vm.$el.querySelector('.el-switch__core');
core.click();
setTimeout(() => {
expect(component.checked).to.equal(true);
expect(component.$el.classList.contains('is-checked')).to.equal(true);
expect(input.checked).to.equal(true);
core.click();
setTimeout(() => {
expect(component.checked).to.equal(true);
expect(component.$el.classList.contains('is-checked')).to.equal(true);
expect(input.checked).to.equal(true);
done();
}, 10);
}, 10);
});
it('sets checkbox value', done => {
vm = createVue({
template: `
`,
data() {
return {
value: false
};
}
}, true);
vm.value = true;
setTimeout(() => {
expect(vm.$el.querySelector('input').checked).to.equal(true);
vm.value = false;
setTimeout(() => {
expect(vm.$el.querySelector('input').checked).to.equal(false);
done();
}, 10);
}, 10);
});
});