index.spec.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /* eslint-disable camelcase */
  2. import { renderToString } from '@vue/server-test-utils';
  3. import AddressEdit from '..';
  4. import areaList from '../../area/demo/area.simple';
  5. import { mount, later, transitionStub } from '../../../test/utils';
  6. transitionStub();
  7. const addressInfo = {
  8. name: '测试',
  9. tel: '13000000000',
  10. province: '北京市',
  11. city: '北京市',
  12. county: '朝阳区',
  13. addressDetail: '详细地址',
  14. areaCode: '110101',
  15. postalCode: '10000',
  16. isDefault: true
  17. };
  18. const createComponent = () => {
  19. const wrapper = mount(AddressEdit, {
  20. propsData: {
  21. areaList,
  22. addressInfo,
  23. showPostal: true
  24. }
  25. });
  26. const button = wrapper.find('.van-button');
  27. const field = wrapper.findAll('.van-field__control');
  28. const { errorInfo, data } = wrapper.vm;
  29. return {
  30. vm: wrapper.vm,
  31. data,
  32. field,
  33. button,
  34. wrapper,
  35. errorInfo
  36. };
  37. };
  38. test('create a AddressEdit', () => {
  39. expect(renderToString(AddressEdit)).toMatchSnapshot();
  40. });
  41. test('create a AddressEdit with props', () => {
  42. const wrapper = renderToString(AddressEdit, {
  43. propsData: {
  44. areaList,
  45. addressInfo,
  46. showPostal: true,
  47. showSetDefault: true,
  48. showSearchResult: true
  49. }
  50. });
  51. expect(wrapper).toMatchSnapshot();
  52. });
  53. test('valid name', () => {
  54. const { data, field, button, errorInfo } = createComponent();
  55. // name empty
  56. data.name = '';
  57. button.trigger('click');
  58. expect(errorInfo.name).toBeTruthy();
  59. field.at(0).trigger('focus');
  60. expect(errorInfo.name).toBeFalsy();
  61. });
  62. it('valid tel', () => {
  63. const { data, field, button, errorInfo } = createComponent();
  64. data.tel = '';
  65. button.trigger('click');
  66. expect(errorInfo.tel).toBeTruthy();
  67. field.at(1).trigger('focus');
  68. expect(errorInfo.tel).toBeFalsy();
  69. });
  70. it('valid areaCode', () => {
  71. const { data, button, errorInfo } = createComponent();
  72. // areaCode empty
  73. data.areaCode = '';
  74. button.trigger('click');
  75. expect(errorInfo.areaCode).toBeTruthy();
  76. // areaCode invalid
  77. data.areaCode = '-1';
  78. button.trigger('click');
  79. expect(errorInfo.areaCode).toBeTruthy();
  80. });
  81. it('valid addressDetail', () => {
  82. const { data, field, button, errorInfo } = createComponent();
  83. data.addressDetail = '';
  84. button.trigger('click');
  85. expect(errorInfo.addressDetail).toBeTruthy();
  86. field.at(3).trigger('focus');
  87. expect(errorInfo.addressDetail).toBeFalsy();
  88. });
  89. test('valid postal code', () => {
  90. const { vm, data, field, button, errorInfo } = createComponent();
  91. // postalCode invalid
  92. data.postalCode = '123';
  93. button.trigger('click');
  94. expect(errorInfo.postalCode).toBeTruthy();
  95. field.at(4).trigger('focus');
  96. expect(errorInfo.postalCode).toBeFalsy();
  97. // valid result
  98. data.postalCode = '123456';
  99. button.trigger('click');
  100. // not show postalCode
  101. data.postalCode = '156';
  102. vm.showPostal = false;
  103. button.trigger('click');
  104. expect(errorInfo.postalCode).toBeFalsy();
  105. });
  106. test('on change detail', () => {
  107. const wrapper = mount(AddressEdit);
  108. const field = wrapper.findAll('.van-field__control').at(3);
  109. field.element.value = '123';
  110. field.trigger('input');
  111. expect(wrapper.emitted('change-detail')[0][0]).toEqual('123');
  112. });
  113. test('watch address info', () => {
  114. const wrapper = mount(AddressEdit);
  115. wrapper.setProps({ addressInfo: { name: '123' } });
  116. expect(wrapper.vm.data.name).toEqual('123');
  117. });
  118. test('set/get area code', async () => {
  119. const wrapper = mount(AddressEdit, {
  120. propsData: { areaList }
  121. });
  122. expect(wrapper.vm.getArea()).toEqual([
  123. { code: '110000', name: '北京市' },
  124. { code: '110100', name: '北京市' },
  125. { code: '110101', name: '东城区' }
  126. ]);
  127. wrapper.vm.setAreaCode('110102');
  128. await later(50);
  129. expect(wrapper.vm.data.areaCode).toEqual('110102');
  130. expect(wrapper.vm.getArea()).toEqual([
  131. { code: '110000', name: '北京市' },
  132. { code: '110100', name: '北京市' },
  133. { code: '110102', name: '西城区' }
  134. ]);
  135. wrapper.vm.$refs = [];
  136. wrapper.vm.setAreaCode('110102');
  137. expect(wrapper.vm.getArea()).toEqual([]);
  138. });
  139. test('watch area code', async () => {
  140. const wrapper = mount(AddressEdit, {
  141. propsData: {
  142. areaList: {},
  143. addressInfo: {
  144. areaCode: '110101'
  145. }
  146. }
  147. });
  148. expect(wrapper.vm.data.city).toEqual('');
  149. wrapper.vm.areaList = areaList;
  150. await later(50);
  151. expect(wrapper.vm.data.city).toEqual('北京市');
  152. });
  153. test('show search result', async () => {
  154. const wrapper = mount(AddressEdit, {
  155. propsData: {
  156. showSearchResult: true,
  157. searchResult: [
  158. { name: 'name1', address: 'address1' },
  159. { name: 'name2' },
  160. { address: 'address2' }
  161. ]
  162. }
  163. });
  164. const field = wrapper.findAll('.van-field__control').at(3);
  165. const input = field.element;
  166. field.trigger('focus');
  167. const items = wrapper.findAll('.van-icon-location-o');
  168. items.at(0).element.parentNode.click();
  169. expect(input.value).toEqual('address1 name1');
  170. items.at(1).element.parentNode.click();
  171. expect(input.value).toEqual('name2');
  172. items.at(2).element.parentNode.click();
  173. expect(input.value).toEqual('address2');
  174. field.trigger('blur');
  175. await later(150);
  176. expect(wrapper.vm.detailFocused).toBeFalsy();
  177. });
  178. test('delete address', async () => {
  179. const wrapper = mount(AddressEdit, {
  180. attachToDocument: true,
  181. propsData: {
  182. showDelete: true
  183. }
  184. });
  185. const deleteButton = wrapper.findAll('.van-button').at(1);
  186. deleteButton.trigger('click');
  187. await later();
  188. document.querySelector('.van-dialog__cancel').click();
  189. deleteButton.trigger('click');
  190. document.querySelector('.van-dialog__confirm').click();
  191. await later();
  192. expect(wrapper.emitted('delete')).toBeTruthy();
  193. expect(wrapper.emitted('cancel-delete')).toBeTruthy();
  194. });
  195. test('setAddressDetail method', () => {
  196. const { vm, data } = createComponent();
  197. vm.setAddressDetail('test');
  198. expect(data.addressDetail).toEqual('test');
  199. });
  200. test('select area', () => {
  201. const { wrapper, data } = createComponent();
  202. wrapper.find('.van-picker__confirm').trigger('click');
  203. expect(data.areaCode).toEqual('110101');
  204. });