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

100% Statements 26/26
100% Branches 0/0
100% Functions 10/10
100% Lines 26/26
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                                                                                                                                       
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 Nav from '../../src/nav/nav'
import NavItem from '../../src/nav/navItem'
import SubNav from '../../src/nav/subNav'
 
Vue.component('am-nav', Nav)
Vue.component('am-nav-item', NavItem)
Vue.component('am-sub-nav', SubNav)
 
describe('Nav', () => {
  it('nav.vue 存在.', () => {
    expect(Nav).to.be.ok
  })
  describe('props', () => {
    it('可以设置 selected.', done => {
      const wrapper = mount(Nav, {
        propsData: {
          selected: 'music'
        },
        slots: {
          default: `
            <am-nav-item name="music">
              <div>nav 1</div>
            </am-nav-item>
            <am-nav-item name="sport">
              <div>nav 3</div>
            </am-nav-item>
          `
        }
      })
      setTimeout(function() {
        expect(wrapper.find('[data-name="music"].selected').exists()).to.be.true
        done()
      })
    })
    it('可以设置 vertical.', done => {
      const wrapper = mount(Nav, {
        propsData: {
          selected: 'music',
          vertical: true
        },
        slots: {
          default: `
            <am-nav-item name="music">
              <div>nav 1</div>
            </am-nav-item>
            <am-nav-item name="sport">
              <div>nav 3</div>
            </am-nav-item>
          `
        }
      })
      setTimeout(function() {
        expect(wrapper.classes('vertical')).to.be.true
        done()
      })
    })
  })
  describe('事件', () => {
    it('触发 update:selected 事件', done => {
      const callback = sinon.fake()
      const wrapper = mount(Nav, {
        propsData: {
          selected: 'music'
        },
        slots: {
          default: `
            <am-nav-item name="music">
              <div>nav 1</div>
            </am-nav-item>
            <am-nav-item name="sport">
              <div>nav 3</div>
            </am-nav-item>
          `
        },
        listeners: {
          'update:selected': callback
        }
      })
      setTimeout(() => {
        wrapper.find('[data-name="sport"]').trigger('click')
        expect(callback).to.have.been.calledWith('sport')
        done()
      })
    })
  })
})