UNPKG

vimo-dt

Version:

A Vue2.x UI Project For Mobile & HyBrid

359 lines (329 loc) 9.38 kB
/* eslint-disable no-undef,no-unused-expressions */ import { mount } from 'vue-test-utils' import sinon from 'sinon' import deepAssign from 'deep-assign' import cloneDeep from 'lodash.clonedeep' import Button from '../index' import Icon from '../../icon/index' import Item from '../../item/index' import Vue from 'vue' import { createRenderer } from 'vue-server-renderer' let options = { propsData: { color: 'primary', mode: 'ios' }, slots: { default: '<span>Test</span>' } } describe('Button', function () { it('@base: renders the correct markup', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'md' } }) let wrapper = mount(Button, opts) const result = '<button class="ion-button button button-md button-default button-default-md button-md-primary"><span class="button-inner"><span>Test</span></span></button>' expect(wrapper.html()).toEqual(result) }) it('@base: renders the correct text', function () { let opts = deepAssign(cloneDeep(options), { slots: { default: '<span>Test</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.text()).toEqual('Test') }) // it's also easy to check for the existence of elements it('@base: has a button', function () { let opts = deepAssign(cloneDeep(options), { slots: { default: '<span>DOM</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.find('button')).toBeTruthy() expect(wrapper.contains('span')).toBeTruthy() }) it('@base: component must have a name', function () { let opts = deepAssign(cloneDeep(options), { slots: { default: '<span>Name</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.name()).toEqual('Button') }) it('@base: have the right className', function () { let opts = deepAssign(cloneDeep(options), { slots: { default: '<span>HasClass</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('ion-button')).toBeTruthy() }) it('@base: matches snapshot', () => { const renderer = createRenderer() const wrapper = mount(Button, options) renderer.renderToString(wrapper.vm, (err, str) => { if (err) throw new Error(err) expect(str).toMatchSnapshot() }) }) it('@props: color', function () { let opts = deepAssign(cloneDeep(options), { propsData: { color: 'danger', mode: 'md' }, slots: { default: '<span>color</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-md-danger')).toBeTruthy() }) it('@props: mode', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'md' }, slots: { default: '<span>mode</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-md')).toBeTruthy() }) it('@props: small', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', small: true }, slots: { default: '<span>small</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-small-ios')).toBeTruthy() }) it('@props: active', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', active: true }, slots: { default: '<span>small</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasAttribute('active', 'true')).toBeTruthy() }) it('@props: default', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', default: true }, slots: { default: '<span>default</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-default-ios')).toBeTruthy() }) it('@props: large', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', large: true }, slots: { default: '<span>large</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-large-ios')).toBeTruthy() }) it('@props: round', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', round: true }, slots: { default: '<span>round</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-round-ios')).toBeTruthy() }) it('@props: full', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', full: true }, slots: { default: '<span>round</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-full-ios')).toBeTruthy() }) it('@props: block', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', block: true }, slots: { default: '<span>block</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-block-ios')).toBeTruthy() }) it('@props: menutoggle', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', menutoggle: true }, slots: { default: '<span>menutoggle</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-menutoggle-ios')).toBeTruthy() }) it('@props: outline', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', outline: true }, slots: { default: '<span>outline</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-outline-ios')).toBeTruthy() }) it('@props: clear', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', clear: true }, slots: { default: '<span>clear</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-clear-ios')).toBeTruthy() }) it('@props: solid', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', solid: true }, slots: { default: '<span>solid</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-solid-ios')).toBeTruthy() }) it('@props: role=action-sheet-button', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', role: 'action-sheet-button' }, slots: { default: '<span>role:action-sheet-button</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('action-sheet-button-ios')).toBeTruthy() }) it('@props: role=bar-button', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', role: 'bar-button' }, slots: { default: '<span>role:bar-button</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('bar-button')).toBeTruthy() }) it('@props: strong', function () { let opts = deepAssign(cloneDeep(options), { propsData: { mode: 'ios', strong: true }, slots: { default: '<span>strong</span>' } }) let wrapper = mount(Button, opts) expect(wrapper.hasClass('button-strong-ios')).toBeTruthy() }) it('@event: triger click', function () { let opts = deepAssign(cloneDeep(options), { slots: { default: '<span>Click</span>' } }) let wrapper = mount(Button, opts) sinon.spy(wrapper.vm, '$_clickHandler') // 监视crawler.launch,这是个function wrapper.trigger('click') expect(wrapper.vm.$_clickHandler.callCount === 1).toBeTruthy() wrapper.vm.$_clickHandler.restore() // 消除监视 }) it('@slots: icon-only', function () { var res = Vue.compile('<vm-button><Icon name="car"></Icon></vm-button>') let Temp = { components: {'vm-button': Button, Icon}, render: res.render } let wrapper = mount(Temp) expect(wrapper.hasAttribute('icon-only', 'icon-only')).toBeTruthy() }) it('@slots: icon-left', function () { var res = Vue.compile('<vm-button><Icon name="car"></Icon>Icon</vm-button>') let wrapper = mount({ render: res.render, components: {'vm-button': Button, Icon} }) expect(wrapper.hasAttribute('icon-left', 'icon-left')).toBeTruthy() }) it('@slots: icon-right', function () { var res = Vue.compile('<vm-button>Icon<Icon name="car"></Icon></vm-button>') let wrapper = mount({ render: res.render, components: {'vm-button': Button, Icon} }) expect(wrapper.hasAttribute('icon-right', 'icon-right')).toBeTruthy() }) it('@parent: Item', function () { var res = Vue.compile('<Item><vm-button>Icon<Icon name="car"></Icon></vm-button></Item>') let wrapper = mount({ render: res.render, components: {'vm-button': Button, Item, Icon} }) expect(wrapper.html().indexOf('item-button') > -1).toBeTruthy() }) })