123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- import { createVue, triggerEvent, createTest, destroyVM, wait } from '../util';
- import Popover from 'packages/popover';
- describe('Popover', () => {
- let vm;
- afterEach(() => {
- destroyVM(vm);
- });
- describe('trigger', () => {
- const createVM = (trigger) => {
- return createVue(`
- <div>
- <el-popover
- ref="popover"
- trigger="${trigger}"
- content="content">
- <button slot="reference">trigger ${trigger}</button>
- </el-popover>
- </div>
- `, true);
- };
- it('click', () => {
- vm = createVM('click');
- const compo = vm.$refs.popover;
- vm.$el.querySelector('button').click();
- expect(compo.showPopper).to.true;
- document.body.click();
- expect(compo.showPopper).to.false;
- });
- it('hover', done => {
- vm = createVM('hover');
- const compo = vm.$refs.popover;
- const button = vm.$el.querySelector('button');
- triggerEvent(button, 'mouseenter');
- expect(compo.showPopper).to.true;
- triggerEvent(button, 'mouseleave');
- setTimeout(_ => {
- expect(compo.showPopper).to.false;
- done();
- }, 250); // 代码里是 200ms
- });
- it('manual', done => {
- vm = createVM('manual');
- const compo = vm.$refs.popover;
- const button = vm.$el.querySelector('button');
- triggerEvent(button, 'mouseenter');
- expect(compo.showPopper).to.false;
- triggerEvent(button, 'mouseleave');
- setTimeout(_ => {
- expect(compo.showPopper).to.false;
- done();
- }, 250); // 代码里是 200ms
- });
- it('focus input in children node', () => {
- vm = createVue(`
- <div>
- <el-popover
- ref="popover"
- trigger="focus"
- content="content">
- <div slot="reference">
- <input type="text" value="trigger focus" />
- </div>
- </el-popover>
- </div>
- `, true);
- const compo = vm.$refs.popover;
- const input = vm.$el.querySelector('input');
- input.focus();
- expect(compo.showPopper).to.true;
- input.blur();
- expect(compo.showPopper).to.false;
- });
- it('focus textarea in children node', () => {
- vm = createVue(`
- <div>
- <el-popover
- ref="popover"
- trigger="focus"
- content="content">
- <div slot="reference">
- <textarea></textarea>
- </div>
- </el-popover>
- </div>
- `, true);
- const compo = vm.$refs.popover;
- const textarea = vm.$el.querySelector('textarea');
- textarea.focus();
- expect(compo.showPopper).to.true;
- textarea.blur();
- expect(compo.showPopper).to.false;
- });
- it('focus input', () => {
- vm = createVue(`
- <div>
- <el-popover
- ref="popover"
- trigger="focus"
- content="content">
- <input type="text" slot="reference" value="trigger focus" />
- </el-popover>
- </div>
- `, true);
- const compo = vm.$refs.popover;
- const input = vm.$el.querySelector('input');
- input.focus();
- expect(compo.showPopper).to.true;
- input.blur();
- expect(compo.showPopper).to.false;
- });
- it('focus button', () => {
- vm = createVM('focus');
- const compo = vm.$refs.popover;
- const button = vm.$el.querySelector('button');
- triggerEvent(button, 'mousedown');
- expect(compo.showPopper).to.true;
- triggerEvent(button, 'mouseup');
- expect(compo.showPopper).to.false;
- });
- });
- describe('create by directive', () => {
- const vm = createVue({
- template: `
- <div>
- <el-popover
- ref="popover1"
- trigger="click"
- content="content">
- </el-popover>
- <button v-popover:popover1>create by directive</button>
- </div>
- `,
- directives: {
- Popover: Popover.directive
- }
- }, true);
- const compo = vm.$refs.popover1;
- it('render', () => {
- expect(vm.$el.querySelector('.el-popover')).to.have.deep.property('textContent').include('content');
- });
- it('triggering click', done => {
- vm.$el.querySelector('button').click();
- expect(compo.popperElm).to.not.exist;
- vm.$nextTick(_ => {
- const popperElm = compo.popperElm;
- expect(getComputedStyle(popperElm).display).to.not.equal('none');
- done();
- });
- });
- it('click outside', () => {
- document.body.click();
- expect(compo.showPopper).to.false;
- });
- });
- describe('create by slot', () => {
- const vm = createVue(`
- <div>
- <el-popover
- ref="popover"
- trigger="click"
- content="content">
- <button slot="reference">create by slot</button>
- </el-popover>
- </div>
- `, true);
- const compo = vm.$refs.popover;
- it('render', () => {
- expect(vm.$el.querySelector('.el-popover')).to.have.deep.property('textContent').include('content');
- });
- it('triggering click', done => {
- vm.$el.querySelector('button').click();
- expect(compo.popperElm).to.not.exist;
- vm.$nextTick(_ => {
- const popperElm = compo.popperElm;
- expect(getComputedStyle(popperElm).display).to.not.equal('none');
- done();
- });
- });
- it('click outside', () => {
- document.body.click();
- expect(compo.showPopper).to.false;
- });
- });
- it('show/hide events', done => {
- vm = createVue({
- template: `
- <div>
- <el-popover
- ref="popover"
- trigger="click"
- @show="handleShow"
- @hide="handleHide"
- content="content">
- <button slot="reference">trigger</button>
- </el-popover>
- </div>
- `,
- methods: {
- handleShow() {
- this.trigger = true;
- },
- handleHide() {
- this.trigger = false;
- }
- },
- data() {
- return {
- trigger: false
- };
- }
- }, true);
- vm.$el.querySelector('button').click();
- setTimeout(_ => {
- expect(vm.trigger).to.true;
- document.body.click();
- setTimeout(_ => {
- expect(vm.trigger).to.false;
- done();
- }, 50);
- }, 50);
- });
- describe('open/close delays', () => {
- it('100ms open / instant close', async() => {
- vm = createVue(`
- <div>
- <el-popover
- ref="popover"
- content="content"
- trigger="hover"
- :open-delay="100"
- :close-delay="0">
- <button slot="reference">reference</button>
- </el-popover>
- </div>
- `, true);
- const compo = vm.$refs.popover;
- const button = vm.$el.querySelector('button');
- triggerEvent(button, 'mouseenter');
- expect(compo.showPopper).to.false;
- await wait(150);
- expect(compo.showPopper).to.true;
- triggerEvent(button, 'mouseleave');
- expect(compo.showPopper).to.false;
- });
- it('instant open / 100ms close', async() => {
- vm = createVue(`
- <div>
- <el-popover
- ref="popover"
- content="content"
- trigger="hover"
- :open-delay="0"
- :close-delay="100">
- <button slot="reference">reference</button>
- </el-popover>
- </div>
- `, true);
- const compo = vm.$refs.popover;
- const button = vm.$el.querySelector('button');
- triggerEvent(button, 'mouseenter');
- expect(compo.showPopper).to.true;
- triggerEvent(button, 'mouseleave');
- expect(compo.showPopper).to.true;
- await wait(150);
- expect(compo.showPopper).to.false;
- });
- });
- it('destroy event', () => {
- vm = createTest(Popover, {
- reference: document.createElement('div'),
- popper: document.createElement('div')
- });
- expect(() => vm.$destroy(true)).not.throw();
- });
- });
|