UNPKG

mand-mobile

Version:

A Vue.js 2.0 Mobile UI Toolkit

173 lines (154 loc) 4.01 kB
import Vue from 'vue' import {Radio, RadioBox, RadioGroup, RadioList} from 'mand-mobile' import sinon from 'sinon' import {mount} from '@vue/test-utils' import triggerTouch from '../../popup/test/touch-trigger' describe('Radio', () => { let wrapper afterEach(() => { wrapper && wrapper.destroy() }) it('create a radio', () => { let name = '' wrapper = mount(Radio, { propsData: { name: '123', }, listeners: { input(val) { name = val }, }, }) wrapper.find('.md-radio').trigger('click') expect(name).toEqual('123') }) it('create a radio list', done => { let value = 0 wrapper = mount(RadioList, { propsData: { value, options: [{value: 0, text: '选项1'}, {value: 1, text: '选项2', disabled: true}, {value: 2, text: '选项3'}], defaultIndex: 1, }, listeners: { input(val) { value = val }, }, }) expect(wrapper.findAll('.md-radio-item').length).toEqual(3) wrapper .findAll('.md-radio-item') .at(1) .trigger('click') expect( wrapper .findAll('.md-radio-item') .at(0) .classes('is-selected'), ).toBe(true) wrapper .findAll('.md-radio-item') .at(2) .trigger('click') expect(value).toEqual(2) wrapper.vm.select(1) expect(value).toEqual(1) wrapper.vm.selectByIndex(2) expect(value).toEqual(2) wrapper.setProps({value: 1}) wrapper.vm.options = [{text: '选项1'}, {text: '选项2'}] wrapper.vm.$nextTick(() => { expect(wrapper.findAll('.md-radio-item').length).toEqual(2) done() }) }) it('radio group', () => { Vue.component(Radio.name, Radio) let value = 'a' wrapper = mount(RadioGroup, { propsData: { value, }, slots: { default: ['<md-radio name="a"/>', '<md-radio name="b"/>'], }, listeners: { input(val) { value = val wrapper.setProps({value}) }, }, }) const radios = wrapper.findAll('.md-radio') expect(radios.at(0).classes('is-checked')).toBe(true) radios.at(1).trigger('click') expect(value).toEqual('b') radios.at(0).trigger('click') expect(value).toEqual('a') }) it('radiokbox click event', () => { let value = false wrapper = mount(RadioBox, { propsData: { value, name: 'a', }, listeners: { input(val) { value = val wrapper.setProps({value}) }, }, }) const eventSpy = sinon.spy(wrapper.vm, '$emit') const radioBox = wrapper.find('.md-radio-box') radioBox.trigger('click') expect(eventSpy.calledWith('input')).toBe(true) expect(value).toBe('a') }) it('radiobox group', () => { Vue.component(RadioBox.name, RadioBox) let value = 'a' wrapper = mount(RadioGroup, { propsData: { value, }, slots: { default: ['<md-radio-box name="a"/>', '<md-radio-box name="b"/>'], }, listeners: { input(val) { value = val wrapper.setProps({value}) }, }, }) const radios = wrapper.findAll('.md-radio-box') expect(radios.at(0).classes('is-checked')).toBe(true) radios.at(1).trigger('click') expect(value).toEqual('b') radios.at(0).trigger('click') expect(value).toEqual('a') }) it('create a radio list with input', () => { let value = 0 wrapper = mount(RadioList, { propsData: { value, options: [{value: 0, text: '选项1'}, {value: 1, text: '选项2'}, {value: 2, text: '选项3'}], hasInput: true, }, listeners: { input(val) { value = val }, }, }) const input = wrapper.find('.md-input-item-input') input.trigger('focus') triggerTouch(input.element, 'input', 0, 0, '123') expect(value).toEqual('123') }) })