| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- /* eslint-disable camelcase */
- import { renderToString } from '@vue/server-test-utils';
- import AddressEdit from '..';
- import areaList from '../../area/demo/area.simple';
- import { mount, later, transitionStub } from '../../../test/utils';
- transitionStub();
- const addressInfo = {
- name: '测试',
- tel: '13000000000',
- province: '北京市',
- city: '北京市',
- county: '朝阳区',
- addressDetail: '详细地址',
- areaCode: '110101',
- postalCode: '10000',
- isDefault: true
- };
- const createComponent = () => {
- const wrapper = mount(AddressEdit, {
- propsData: {
- areaList,
- addressInfo,
- showPostal: true
- }
- });
- const button = wrapper.find('.van-button');
- const field = wrapper.findAll('.van-field__control');
- const { errorInfo, data } = wrapper.vm;
- return {
- vm: wrapper.vm,
- data,
- field,
- button,
- wrapper,
- errorInfo
- };
- };
- test('create a AddressEdit', () => {
- expect(renderToString(AddressEdit)).toMatchSnapshot();
- });
- test('create a AddressEdit with props', () => {
- const wrapper = renderToString(AddressEdit, {
- propsData: {
- areaList,
- addressInfo,
- showPostal: true,
- showSetDefault: true,
- showSearchResult: true
- }
- });
- expect(wrapper).toMatchSnapshot();
- });
- test('valid name', () => {
- const { data, field, button, errorInfo } = createComponent();
- // name empty
- data.name = '';
- button.trigger('click');
- expect(errorInfo.name).toBeTruthy();
- field.at(0).trigger('focus');
- expect(errorInfo.name).toBeFalsy();
- });
- it('valid tel', () => {
- const { data, field, button, errorInfo } = createComponent();
- data.tel = '';
- button.trigger('click');
- expect(errorInfo.tel).toBeTruthy();
- field.at(1).trigger('focus');
- expect(errorInfo.tel).toBeFalsy();
- });
- it('valid areaCode', () => {
- const { data, button, errorInfo } = createComponent();
- // areaCode empty
- data.areaCode = '';
- button.trigger('click');
- expect(errorInfo.areaCode).toBeTruthy();
- // areaCode invalid
- data.areaCode = '-1';
- button.trigger('click');
- expect(errorInfo.areaCode).toBeTruthy();
- });
- it('valid addressDetail', () => {
- const { data, field, button, errorInfo } = createComponent();
- data.addressDetail = '';
- button.trigger('click');
- expect(errorInfo.addressDetail).toBeTruthy();
- field.at(3).trigger('focus');
- expect(errorInfo.addressDetail).toBeFalsy();
- });
- test('valid postal code', () => {
- const { vm, data, field, button, errorInfo } = createComponent();
- // postalCode invalid
- data.postalCode = '123';
- button.trigger('click');
- expect(errorInfo.postalCode).toBeTruthy();
- field.at(4).trigger('focus');
- expect(errorInfo.postalCode).toBeFalsy();
- // valid result
- data.postalCode = '123456';
- button.trigger('click');
- // not show postalCode
- data.postalCode = '156';
- vm.showPostal = false;
- button.trigger('click');
- expect(errorInfo.postalCode).toBeFalsy();
- });
- test('on change detail', () => {
- const wrapper = mount(AddressEdit);
- const field = wrapper.findAll('.van-field__control').at(3);
- field.element.value = '123';
- field.trigger('input');
- expect(wrapper.emitted('change-detail')[0][0]).toEqual('123');
- });
- test('watch address info', () => {
- const wrapper = mount(AddressEdit);
- wrapper.setProps({ addressInfo: { name: '123' } });
- expect(wrapper.vm.data.name).toEqual('123');
- });
- test('set/get area code', async () => {
- const wrapper = mount(AddressEdit, {
- propsData: { areaList }
- });
- expect(wrapper.vm.getArea()).toEqual([
- { code: '110000', name: '北京市' },
- { code: '110100', name: '北京市' },
- { code: '110101', name: '东城区' }
- ]);
- wrapper.vm.setAreaCode('110102');
- await later(50);
- expect(wrapper.vm.data.areaCode).toEqual('110102');
- expect(wrapper.vm.getArea()).toEqual([
- { code: '110000', name: '北京市' },
- { code: '110100', name: '北京市' },
- { code: '110102', name: '西城区' }
- ]);
- wrapper.vm.$refs = [];
- wrapper.vm.setAreaCode('110102');
- expect(wrapper.vm.getArea()).toEqual([]);
- });
- test('watch area code', async () => {
- const wrapper = mount(AddressEdit, {
- propsData: {
- areaList: {},
- addressInfo: {
- areaCode: '110101'
- }
- }
- });
- expect(wrapper.vm.data.city).toEqual('');
- wrapper.vm.areaList = areaList;
- await later(50);
- expect(wrapper.vm.data.city).toEqual('北京市');
- });
- test('show search result', async () => {
- const wrapper = mount(AddressEdit, {
- propsData: {
- showSearchResult: true,
- searchResult: [
- { name: 'name1', address: 'address1' },
- { name: 'name2' },
- { address: 'address2' }
- ]
- }
- });
- const field = wrapper.findAll('.van-field__control').at(3);
- const input = field.element;
- field.trigger('focus');
- const items = wrapper.findAll('.van-icon-location-o');
- items.at(0).element.parentNode.click();
- expect(input.value).toEqual('address1 name1');
- items.at(1).element.parentNode.click();
- expect(input.value).toEqual('name2');
- items.at(2).element.parentNode.click();
- expect(input.value).toEqual('address2');
- field.trigger('blur');
- await later(150);
- expect(wrapper.vm.detailFocused).toBeFalsy();
- });
- test('delete address', async () => {
- const wrapper = mount(AddressEdit, {
- attachToDocument: true,
- propsData: {
- showDelete: true
- }
- });
- const deleteButton = wrapper.findAll('.van-button').at(1);
- deleteButton.trigger('click');
- await later();
- document.querySelector('.van-dialog__cancel').click();
- deleteButton.trigger('click');
- document.querySelector('.van-dialog__confirm').click();
- await later();
- expect(wrapper.emitted('delete')).toBeTruthy();
- expect(wrapper.emitted('cancel-delete')).toBeTruthy();
- });
- test('setAddressDetail method', () => {
- const { vm, data } = createComponent();
- vm.setAddressDetail('test');
- expect(data.addressDetail).toEqual('test');
- });
- test('select area', () => {
- const { wrapper, data } = createComponent();
- wrapper.find('.van-picker__confirm').trigger('click');
- expect(data.areaCode).toEqual('110101');
- });
|