all files / tests/unit/ collapse.spec.js

100% Statements 38/38
100% Branches 0/0
100% Functions 10/10
100% Lines 38/38
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118                                                                                                                                                               
import chai, { expect } from 'chai'
import sinon from 'sinon'
import sinonChai from 'sinon-chai'
chai.use(sinonChai)
import { mount } from '@vue/test-utils'
 
import Vue from 'vue'
import Collapse from '../../src/collapse/collapse'
import CollapseItem from '../../src/collapse/collapseItem'
 
Vue.component('am-collapse-item', CollapseItem)
 
describe('Collapse', () => {
  it('存在.', () => {
    expect(Collapse).to.be.ok
  })
  it('可以设置 single.', done => {
    const callback = sinon.fake()
    const wrapper = mount(Collapse, {
      propsData: {
        single: true,
        selected: ['apple'],
        attachToDocument: true
      },
      slots: {
        default: `
        <am-collapse-item title="title_1" name="apple"><span id="content_1">content_1</span></am-collapse-item>
        <am-collapse-item title="title_2" name="orange"><span id="content_2">content_2</span></am-collapse-item>
        `
      },
      listeners: {
        'update:selected': callback
      }
    })
    setTimeout(() => {
      expect(wrapper.find('[data-name="apple"].active').exists()).to.be.true
      wrapper.find('[data-name="orange"]').trigger('click')
      expect(callback).to.have.been.calledWith(['orange'])
      expect(wrapper.find('[data-name="orange"].active').exists()).to.be.true
      expect(wrapper.find('[data-name="apple"].active').exists()).to.be.false
      done()
    })
  })
  it('selected 默认为空数组.', done => {
    const callback = sinon.fake()
    const wrapper = mount(Collapse, {
      propsData: {
        single: true,
        attachToDocument: true
      },
      slots: {
        default: `
        <am-collapse-item title="title_1" name="apple"><span id="content_1">content_1</span></am-collapse-item>
        <am-collapse-item title="title_2" name="orange"><span id="content_2">content_2</span></am-collapse-item>
        `
      },
      listeners: {
        'update:selected': callback
      }
    })
    setTimeout(() => {
      expect(wrapper.find('.active').exists()).to.be.false
      done()
    })
  })
  it('single 默认为false.', done => {
    const callback = sinon.fake()
    const wrapper = mount(Collapse, {
      propsData: {
        selected: ['apple'],
        attachToDocument: true
      },
      slots: {
        default: `
        <am-collapse-item title="title_1" name="apple"><span id="content_1">content_1</span></am-collapse-item>
        <am-collapse-item title="title_2" name="orange"><span id="content_2">content_2</span></am-collapse-item>
        <am-collapse-item title="title_2" name="banana"><span id="content_2">content_2</span></am-collapse-item>
        `
      },
      listeners: {
        'update:selected': callback
      }
    })
    setTimeout(() => {
      expect(wrapper.find('[data-name="apple"].active').exists()).to.be.true
      wrapper.find('[data-name="banana"]').trigger('click')
      expect(wrapper.find('[data-name="banana"].active').exists()).to.be.true
      expect(callback).to.have.been.calledWith(['apple', 'banana'])
      done()
    })
  })
  it('关闭打开的collapseItem', done => {
    const callback = sinon.fake()
    const wrapper = mount(Collapse, {
      propsData: {
        selected: ['apple'],
        attachToDocument: true
      },
      slots: {
        default: `
        <am-collapse-item title="title_1" name="apple"><span id="content_1">content_1</span></am-collapse-item>
        <am-collapse-item title="title_2" name="orange"><span id="content_2">content_2</span></am-collapse-item>
        <am-collapse-item title="title_2" name="banana"><span id="content_2">content_2</span></am-collapse-item>
        `
      },
      listeners: {
        'update:selected': callback
      }
    })
    setTimeout(() => {
      wrapper.find('[data-name="apple"]').trigger('click')
      expect(callback).to.have.been.calledWith([])
      expect(wrapper.find('[data-name="apple"].active').exists()).to.be.false
      done()
    })
  })
})