import { createVue, triggerEvent } from '../util'; import Sync from 'element-ui/src/utils/sync'; const Test = { template: `
A test component.
`, data() { return { visible: true }; } }; describe('Sync', () => { it('should not throw when use incorrectly', () => { sinon.stub(window.console, 'warn'); createVue({ template: ` `, components: { Test }, directives: { Sync }, data() { return { myVisible: true }; } }); expect(window.console.warn.callCount).to.equal(1); createVue({ template: ` `, components: { Test }, directives: { Sync }, data() { return { myVisible: true }; } }); expect(window.console.warn.callCount).to.equal(2); createVue({ template: ` `, components: { Test }, directives: { Sync }, data() { return { myVisible: true }; } }); expect(window.console.warn.callCount).to.equal(3); createVue({ template: `
`, components: { Test }, directives: { Sync }, data() { return { myVisible: true }; } }); expect(window.console.warn.callCount).to.equal(4); window.console.warn.restore(); }); it('context variable should change when inner component variable change', (done) => { const vm = createVue({ template: ` `, components: { Test }, directives: { Sync }, data() { return { myVisible: true }; } }, true); triggerEvent(vm.$el.querySelector('.sync-test button'), 'click', {}); setTimeout(() => { expect(vm.myVisible).to.be.false; done(); }, 10); }); it('inner component variable should change when context variable change', (done) => { const vm = createVue({ template: ` `, components: { Test }, directives: { Sync }, data() { return { myVisible: true }; } }, true); vm.myVisible = false; setTimeout(() => { expect(vm.$refs.test.visible).to.be.false; expect(vm.$refs.test.$el.style.display).to.equal('none'); done(); }, 10); }); it('should unwatch expression after destroy', () => { const vm = createVue({ template: ` `, components: { Test }, directives: { Sync }, data() { return { myVisible: true, createTest: false }; } }); const beforeBindCount = vm._watchers.length; vm.createTest = true; const delay = 50; setTimeout(() => { const afterBindCount = vm._watchers.length; expect(afterBindCount).to.be.equal(beforeBindCount + 1); vm.createTest = false; setTimeout(() => { const afterDestroyCount = vm._watchers.length; expect(afterDestroyCount).to.be.equal(beforeBindCount); }, delay); }, delay); }); });