setup.ts 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. import '@testing-library/jest-dom'
  2. // Mock Taro Components
  3. jest.mock('@tarojs/components', () => ({
  4. View: 'view',
  5. Text: 'text',
  6. Input: 'input',
  7. ScrollView: 'scroll-view',
  8. Picker: 'picker',
  9. Image: 'image'
  10. }))
  11. // Mock Taro APIs
  12. jest.mock('@tarojs/taro', () => ({
  13. useRouter: () => ({
  14. params: {}
  15. }),
  16. navigateTo: jest.fn(),
  17. redirectTo: jest.fn(),
  18. switchTab: jest.fn(),
  19. reLaunch: jest.fn(),
  20. navigateBack: jest.fn(),
  21. showModal: jest.fn(),
  22. showToast: jest.fn(),
  23. showLoading: jest.fn(),
  24. hideLoading: jest.fn(),
  25. showActionSheet: jest.fn(),
  26. request: jest.fn(),
  27. uploadFile: jest.fn(),
  28. downloadFile: jest.fn(),
  29. connectSocket: jest.fn(),
  30. onSocketOpen: jest.fn(),
  31. onSocketError: jest.fn(),
  32. onSocketMessage: jest.fn(),
  33. onSocketClose: jest.fn(),
  34. sendSocketMessage: jest.fn(),
  35. closeSocket: jest.fn(),
  36. chooseImage: jest.fn(),
  37. previewImage: jest.fn(),
  38. getImageInfo: jest.fn(),
  39. saveImageToPhotosAlbum: jest.fn(),
  40. startRecord: jest.fn(),
  41. stopRecord: jest.fn(),
  42. playVoice: jest.fn(),
  43. pauseVoice: jest.fn(),
  44. stopVoice: jest.fn(),
  45. getBackgroundAudioPlayerState: jest.fn(),
  46. playBackgroundAudio: jest.fn(),
  47. pauseBackgroundAudio: jest.fn(),
  48. seekBackgroundAudio: jest.fn(),
  49. stopBackgroundAudio: jest.fn(),
  50. onBackgroundAudioPlay: jest.fn(),
  51. onBackgroundAudioPause: jest.fn(),
  52. onBackgroundAudioStop: jest.fn(),
  53. chooseVideo: jest.fn(),
  54. saveVideoToPhotosAlbum: jest.fn(),
  55. getLocation: jest.fn(),
  56. chooseLocation: jest.fn(),
  57. openLocation: jest.fn(),
  58. getSystemInfo: jest.fn(),
  59. getNetworkType: jest.fn(),
  60. onNetworkStatusChange: jest.fn(),
  61. onAccelerometerChange: jest.fn(),
  62. startAccelerometer: jest.fn(),
  63. stopAccelerometer: jest.fn(),
  64. onCompassChange: jest.fn(),
  65. startCompass: jest.fn(),
  66. stopCompass: jest.fn(),
  67. makePhoneCall: jest.fn(),
  68. scanCode: jest.fn(),
  69. setClipboardData: jest.fn(),
  70. getClipboardData: jest.fn(),
  71. openBluetoothAdapter: jest.fn(),
  72. closeBluetoothAdapter: jest.fn(),
  73. getBluetoothDevices: jest.fn(),
  74. getConnectedBluetoothDevices: jest.fn(),
  75. onBluetoothDeviceFound: jest.fn(),
  76. onBluetoothAdapterStateChange: jest.fn(),
  77. createBLEConnection: jest.fn(),
  78. closeBLEConnection: jest.fn(),
  79. getBLEDeviceServices: jest.fn(),
  80. getBLEDeviceCharacteristics: jest.fn(),
  81. readBLECharacteristicValue: jest.fn(),
  82. writeBLECharacteristicValue: jest.fn(),
  83. notifyBLECharacteristicValueChange: jest.fn(),
  84. onBLEConnectionStateChange: jest.fn(),
  85. onBLECharacteristicValueChange: jest.fn(),
  86. startBeaconDiscovery: jest.fn(),
  87. stopBeaconDiscovery: jest.fn(),
  88. getBeacons: jest.fn(),
  89. onBeaconUpdate: jest.fn(),
  90. onBeaconServiceChange: jest.fn(),
  91. addPhoneContact: jest.fn(),
  92. getHCEState: jest.fn(),
  93. startHCE: jest.fn(),
  94. stopHCE: jest.fn(),
  95. onHCEMessage: jest.fn(),
  96. sendHCEMessage: jest.fn(),
  97. startWifi: jest.fn(),
  98. stopWifi: jest.fn(),
  99. connectWifi: jest.fn(),
  100. getWifiList: jest.fn(),
  101. onGetWifiList: jest.fn(),
  102. setWifiList: jest.fn(),
  103. onWifiConnected: jest.fn(),
  104. getConnectedWifi: jest.fn(),
  105. showShareMenu: jest.fn(),
  106. hideShareMenu: jest.fn(),
  107. updateShareMenu: jest.fn(),
  108. getShareInfo: jest.fn(),
  109. authCode: jest.fn(),
  110. login: jest.fn(),
  111. checkSession: jest.fn(),
  112. authorize: jest.fn(),
  113. getUserInfo: jest.fn(),
  114. requestPayment: jest.fn(),
  115. showTabBarRedDot: jest.fn(),
  116. hideTabBarRedDot: jest.fn(),
  117. showTabBar: jest.fn(),
  118. hideTabBar: jest.fn(),
  119. setTabBarBadge: jest.fn(),
  120. removeTabBarBadge: jest.fn(),
  121. setTabBarItem: jest.fn(),
  122. setTabBarStyle: jest.fn(),
  123. setNavigationBarTitle: jest.fn(),
  124. setNavigationBarColor: jest.fn(),
  125. showNavigationBarLoading: jest.fn(),
  126. hideNavigationBarLoading: jest.fn(),
  127. setBackgroundColor: jest.fn(),
  128. setBackgroundTextStyle: jest.fn(),
  129. showTabBar: jest.fn(),
  130. hideTabBar: jest.fn(),
  131. setTabBarStyle: jest.fn(),
  132. setTabBarItem: jest.fn(),
  133. showTabBarRedDot: jest.fn(),
  134. hideTabBarRedDot: jest.fn(),
  135. setTabBarBadge: jest.fn(),
  136. removeTabBarBadge: jest.fn(),
  137. pageScrollTo: jest.fn(),
  138. startPullDownRefresh: jest.fn(),
  139. stopPullDownRefresh: jest.fn(),
  140. createSelectorQuery: jest.fn(),
  141. createIntersectionObserver: jest.fn(),
  142. getMenuButtonBoundingClientRect: jest.fn(),
  143. canvasToTempFilePath: jest.fn(),
  144. canvasPutImageData: jest.fn(),
  145. canvasGetImageData: jest.fn(),
  146. setStorage: jest.fn(),
  147. getStorage: jest.fn(),
  148. getStorageInfo: jest.fn(),
  149. removeStorage: jest.fn(),
  150. clearStorage: jest.fn(),
  151. setStorageSync: jest.fn(),
  152. getStorageSync: jest.fn(),
  153. getStorageInfoSync: jest.fn(),
  154. removeStorageSync: jest.fn(),
  155. clearStorageSync: jest.fn(),
  156. getSystemInfoSync: jest.fn(),
  157. getEnv: jest.fn(() => 'h5'),
  158. ENV_TYPE: {
  159. WEAPP: 'WEAPP',
  160. SWAN: 'SWAN',
  161. ALIPAY: 'ALIPAY',
  162. TT: 'TT',
  163. QQ: 'QQ',
  164. JD: 'JD',
  165. WEB: 'WEB',
  166. RN: 'RN',
  167. HARMONY: 'HARMONY'
  168. }
  169. }))
  170. // Mock React Query
  171. jest.mock('@tanstack/react-query', () => ({
  172. useQuery: jest.fn(() => ({
  173. data: null,
  174. isLoading: false,
  175. error: null
  176. })),
  177. useMutation: jest.fn(() => ({
  178. mutate: jest.fn(),
  179. isLoading: false,
  180. error: null
  181. }))
  182. }))
  183. // Mock API client
  184. jest.mock('../src/api', () => ({
  185. areaClient: {
  186. provinces: {
  187. $get: jest.fn(() => Promise.resolve({
  188. status: 200,
  189. json: () => Promise.resolve([
  190. { id: 1, name: '北京市', code: '110000' },
  191. { id: 2, name: '上海市', code: '310000' },
  192. { id: 3, name: '广东省', code: '440000' }
  193. ])
  194. }))
  195. },
  196. cities: {
  197. $get: jest.fn(() => Promise.resolve({
  198. status: 200,
  199. json: () => Promise.resolve([
  200. { id: 1, name: '北京市', code: '110100', provinceId: 1 },
  201. { id: 2, name: '上海市', code: '310100', provinceId: 2 },
  202. { id: 3, name: '广州市', code: '440100', provinceId: 3 },
  203. { id: 4, name: '深圳市', code: '440300', provinceId: 3 }
  204. ])
  205. }))
  206. },
  207. districts: {
  208. $get: jest.fn(() => Promise.resolve({
  209. status: 200,
  210. json: () => Promise.resolve([
  211. { id: 1, name: '东城区', code: '110101', cityId: 1 },
  212. { id: 2, name: '西城区', code: '110102', cityId: 1 },
  213. { id: 3, name: '天河区', code: '440106', cityId: 3 },
  214. { id: 4, name: '越秀区', code: '440104', cityId: 3 }
  215. ])
  216. }))
  217. }
  218. },
  219. locationClient: {
  220. $get: jest.fn(() => Promise.resolve({
  221. status: 200,
  222. json: () => Promise.resolve({
  223. data: [
  224. { id: 1, name: '北京首都国际机场', province: '北京市', city: '北京市', district: '顺义区' },
  225. { id: 2, name: '北京南站', province: '北京市', city: '北京市', district: '丰台区' },
  226. { id: 3, name: '上海虹桥机场', province: '上海市', city: '上海市', district: '长宁区' },
  227. { id: 4, name: '上海火车站', province: '上海市', city: '上海市', district: '静安区' }
  228. ]
  229. })
  230. }))
  231. },
  232. routeClient: {
  233. search: {
  234. $get: jest.fn(() => Promise.resolve({
  235. status: 200,
  236. json: () => Promise.resolve([
  237. {
  238. id: 1,
  239. startLocation: { name: '北京首都国际机场' },
  240. endLocation: { name: '上海虹桥机场' },
  241. activities: [
  242. { id: 1, name: '上海音乐节', startDate: '2025-10-20', venueLocation: { name: '上海音乐厅' } }
  243. ],
  244. routeType: 'departure'
  245. }
  246. ])
  247. }))
  248. }
  249. }
  250. }))