@tarojs/taro-rn 4.0.0-beta.78 → 4.0.0-beta.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/LICENSE +8 -1
  2. package/apiList.js +31 -31
  3. package/dist/api/index.js +1 -1
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/lib/Mask.js +2 -2
  6. package/dist/lib/Mask.js.map +1 -1
  7. package/dist/lib/Popup.js +3 -3
  8. package/dist/lib/Popup.js.map +1 -1
  9. package/dist/lib/StyleSheet.js +1 -1
  10. package/dist/lib/StyleSheet.js.map +1 -1
  11. package/dist/lib/accelerometer.js +1 -1
  12. package/dist/lib/accelerometer.js.map +1 -1
  13. package/dist/lib/chooseMedia/index.js.map +1 -1
  14. package/dist/lib/clearStorage/index.js +2 -2
  15. package/dist/lib/clearStorage/index.js.map +1 -1
  16. package/dist/lib/compressImage/index.js +1 -1
  17. package/dist/lib/compressImage/index.js.map +1 -1
  18. package/dist/lib/connectSocket/index.js.map +1 -1
  19. package/dist/lib/connectSocket/socketTask.js +1 -1
  20. package/dist/lib/connectSocket/socketTask.js.map +1 -1
  21. package/dist/lib/createCameraContext/index.js +3 -3
  22. package/dist/lib/createCameraContext/index.js.map +1 -1
  23. package/dist/lib/createInnerAudioContext/index.js +2 -2
  24. package/dist/lib/createInnerAudioContext/index.js.map +1 -1
  25. package/dist/lib/createVideoContext/index.js +7 -7
  26. package/dist/lib/createVideoContext/index.js.map +1 -1
  27. package/dist/lib/deviceMotion.js +2 -2
  28. package/dist/lib/deviceMotion.js.map +1 -1
  29. package/dist/lib/file.js +4 -4
  30. package/dist/lib/file.js.map +1 -1
  31. package/dist/lib/getAppBaseInfo/index.js +2 -2
  32. package/dist/lib/getAppBaseInfo/index.js.map +1 -1
  33. package/dist/lib/getClipboardData/index.js.map +1 -1
  34. package/dist/lib/getImageInfo/index.js +2 -2
  35. package/dist/lib/getImageInfo/index.js.map +1 -1
  36. package/dist/lib/getLocation/index.js +2 -2
  37. package/dist/lib/getLocation/index.js.map +1 -1
  38. package/dist/lib/getRecorderManager/index.js +5 -5
  39. package/dist/lib/getRecorderManager/index.js.map +1 -1
  40. package/dist/lib/getStorage/index.js.map +1 -1
  41. package/dist/lib/getStorageInfo/index.js +2 -2
  42. package/dist/lib/getStorageInfo/index.js.map +1 -1
  43. package/dist/lib/getSystemInfo/index.js +1 -1
  44. package/dist/lib/getSystemInfo/index.js.map +1 -1
  45. package/dist/lib/getSystemInfoSync/index.js +2 -2
  46. package/dist/lib/getSystemInfoSync/index.js.map +1 -1
  47. package/dist/lib/gyroscope.js +1 -1
  48. package/dist/lib/gyroscope.js.map +1 -1
  49. package/dist/lib/keyboard.js +3 -3
  50. package/dist/lib/keyboard.js.map +1 -1
  51. package/dist/lib/location.js.map +1 -1
  52. package/dist/lib/makePhoneCall/index.js +1 -1
  53. package/dist/lib/makePhoneCall/index.js.map +1 -1
  54. package/dist/lib/media.js +13 -15
  55. package/dist/lib/media.js.map +1 -1
  56. package/dist/lib/network.js +1 -1
  57. package/dist/lib/network.js.map +1 -1
  58. package/dist/lib/offWindowResize/index.js.map +1 -1
  59. package/dist/lib/onWindowResize/index.js +1 -1
  60. package/dist/lib/onWindowResize/index.js.map +1 -1
  61. package/dist/lib/openUrl/index.js +1 -1
  62. package/dist/lib/openUrl/index.js.map +1 -1
  63. package/dist/lib/permission.js +5 -6
  64. package/dist/lib/permission.js.map +1 -1
  65. package/dist/lib/previewImage/index.js +3 -3
  66. package/dist/lib/previewImage/index.js.map +1 -1
  67. package/dist/lib/request/index.js +1 -1
  68. package/dist/lib/request/index.js.map +1 -1
  69. package/dist/lib/scanCode/index.js +22 -22
  70. package/dist/lib/scanCode/index.js.map +1 -1
  71. package/dist/lib/screen.js +2 -2
  72. package/dist/lib/screen.js.map +1 -1
  73. package/dist/lib/setClipboardData/index.js +2 -2
  74. package/dist/lib/setClipboardData/index.js.map +1 -1
  75. package/dist/lib/setKeepScreenOn/index.js +1 -1
  76. package/dist/lib/setKeepScreenOn/index.js.map +1 -1
  77. package/dist/lib/setStorage/index.js.map +1 -1
  78. package/dist/lib/showActionSheet/ActionSheet.js +3 -3
  79. package/dist/lib/showActionSheet/ActionSheet.js.map +1 -1
  80. package/dist/lib/showActionSheet/index.js.map +1 -1
  81. package/dist/lib/showModal/Dialog.js +3 -3
  82. package/dist/lib/showModal/Dialog.js.map +1 -1
  83. package/dist/lib/showModal/index.js.map +1 -1
  84. package/dist/lib/showModal/toast.js +6 -6
  85. package/dist/lib/showModal/toast.js.map +1 -1
  86. package/dist/lib/unsupportedApi.js +4 -2
  87. package/dist/lib/unsupportedApi.js.map +1 -1
  88. package/dist/lib/variable.js +1 -1
  89. package/dist/lib/variable.js.map +1 -1
  90. package/dist/lib/vibrate.js +1 -1
  91. package/dist/lib/vibrate.js.map +1 -1
  92. package/dist/lib/window.js.map +1 -1
  93. package/dist/setup.js +58 -0
  94. package/dist/setup.js.map +1 -0
  95. package/dist/utils/callbackManager.js.map +1 -1
  96. package/dist/utils/index.js.map +1 -1
  97. package/package.json +60 -65
  98. package/src/__tests__/__mock__/mockRNCCameraRoll.js +7 -0
  99. package/src/__tests__/__mock__/mockRNCGeolocation.js +13 -0
  100. package/src/__tests__/__snapshots__/scanCode.test.tsx.snap +154 -0
  101. package/src/__tests__/clipboard.test.ts +88 -0
  102. package/src/__tests__/deviceMotion.test.ts +37 -0
  103. package/src/__tests__/geolocation.test.ts +60 -0
  104. package/src/__tests__/interactive.test.tsx +101 -0
  105. package/src/__tests__/keyboard.test.ts +46 -0
  106. package/src/__tests__/media.test.ts +104 -0
  107. package/src/__tests__/network.test.ts +57 -0
  108. package/src/__tests__/others.test.ts +25 -0
  109. package/src/__tests__/phone.test.ts +31 -0
  110. package/src/__tests__/request.test.ts +146 -0
  111. package/src/__tests__/scanCode.test.tsx +14 -0
  112. package/src/__tests__/storage.test.ts +202 -0
  113. package/src/__tests__/system.test.ts +69 -0
  114. package/src/__tests__/vibrate.test.ts +27 -0
  115. package/src/__tests__/websocket.test.ts +170 -0
  116. package/src/api/index.ts +31 -31
  117. package/src/lib/ENV_TYPE/index.ts +1 -1
  118. package/src/lib/Mask.tsx +2 -2
  119. package/src/lib/Popup.tsx +6 -8
  120. package/src/lib/StyleSheet.ts +1 -1
  121. package/src/lib/accelerometer.ts +1 -2
  122. package/src/lib/arrayBufferToBase64/index.ts +1 -1
  123. package/src/lib/base64ToArrayBuffer/index.ts +1 -1
  124. package/src/lib/chooseMedia/index.ts +1 -1
  125. package/src/lib/clearStorage/index.ts +0 -1
  126. package/src/lib/clearStorageSync/index.ts +1 -1
  127. package/src/lib/compressImage/index.ts +0 -1
  128. package/src/lib/connectSocket/socketTask.ts +9 -7
  129. package/src/lib/createCameraContext/index.ts +4 -6
  130. package/src/lib/createInnerAudioContext/index.ts +0 -1
  131. package/src/lib/createSelectorQuery/index.ts +1 -1
  132. package/src/lib/deviceMotion.ts +3 -4
  133. package/src/lib/file.ts +8 -9
  134. package/src/lib/getClipboardData/index.ts +0 -1
  135. package/src/lib/getEnv/index.ts +1 -1
  136. package/src/lib/getFileSystemManager/index.ts +1 -1
  137. package/src/lib/getLocation/index.ts +3 -4
  138. package/src/lib/getRecorderManager/index.ts +1 -1
  139. package/src/lib/getStorage/index.ts +0 -1
  140. package/src/lib/getStorageInfo/index.ts +0 -1
  141. package/src/lib/getStorageInfoSync/index.ts +1 -1
  142. package/src/lib/getStorageSync/index.ts +1 -1
  143. package/src/lib/getSystemInfo/index.ts +2 -2
  144. package/src/lib/getSystemInfoSync/index.ts +3 -3
  145. package/src/lib/gyroscope.ts +46 -47
  146. package/src/lib/keyboard.ts +4 -5
  147. package/src/lib/location.ts +5 -6
  148. package/src/lib/makePhoneCall/index.ts +1 -2
  149. package/src/lib/media.ts +18 -21
  150. package/src/lib/network.ts +5 -5
  151. package/src/lib/offLocationChange/index.ts +1 -1
  152. package/src/lib/offUserCaptureScreen/index.ts +1 -1
  153. package/src/lib/onLocationChange/index.ts +1 -1
  154. package/src/lib/onUserCaptureScreen/index.ts +1 -1
  155. package/src/lib/onWindowResize/index.ts +2 -2
  156. package/src/lib/openUrl/index.d.ts +22 -23
  157. package/src/lib/openUrl/index.ts +1 -2
  158. package/src/lib/permission.ts +25 -33
  159. package/src/lib/previewImage/index.tsx +3 -4
  160. package/src/lib/removeStorageSync/index.ts +1 -1
  161. package/src/lib/request/index.ts +2 -2
  162. package/src/lib/scanCode/index.tsx +15 -17
  163. package/src/lib/screen.ts +0 -1
  164. package/src/lib/setClipboardData/index.ts +2 -3
  165. package/src/lib/setKeepScreenOn/index.ts +1 -2
  166. package/src/lib/setStorage/index.ts +0 -1
  167. package/src/lib/setStorageSync/index.ts +1 -1
  168. package/src/lib/showActionSheet/ActionSheet.tsx +6 -7
  169. package/src/lib/showActionSheet/index.tsx +0 -1
  170. package/src/lib/showModal/Dialog.tsx +6 -7
  171. package/src/lib/showModal/index.tsx +0 -1
  172. package/src/lib/showModal/toast.tsx +11 -12
  173. package/src/lib/startGyroscope/index.ts +1 -1
  174. package/src/lib/startLocationUpdate/index.ts +1 -1
  175. package/src/lib/unsupportedApi.ts +5 -3
  176. package/src/lib/vibrate.ts +10 -11
  177. package/src/lib/window.ts +2 -3
  178. package/src/setup.ts +64 -0
  179. package/{types → src/types}/vue/index.d.ts +3 -2
  180. package/src/utils/callbackManager.ts +5 -5
  181. package/src/utils/index.ts +4 -4
  182. /package/{types → src/types}/definition.d.ts +0 -0
@@ -0,0 +1,104 @@
1
+ import { getImageInfo } from '../lib/getImageInfo'
2
+ import { saveImageToPhotosAlbum } from '../lib/saveImageToPhotosAlbum'
3
+ import { saveVideoToPhotosAlbum } from '../lib/saveVideoToPhotosAlbum'
4
+
5
+ const Taro = {
6
+ getImageInfo,
7
+ saveImageToPhotosAlbum,
8
+ saveVideoToPhotosAlbum,
9
+ }
10
+
11
+ // 原生模块导出缺少 react_native_1.NativeModules.RNCCameraRoll setup mock
12
+
13
+ describe('media', () => {
14
+ describe('getImageInfo', () => {
15
+ test('能正确获取图片信息', () => {
16
+ const url = 'https://img12.360buyimg.com/ling/jfs/t19387/224/2632923601/58290/3bbe4eda/5b03f63cN17d4a46c.png'
17
+ const width = 320
18
+ const height = 240
19
+ const success = jest.fn()
20
+ const fail = jest.fn()
21
+ const complete = jest.fn()
22
+
23
+ expect.assertions(8)
24
+ return Taro.getImageInfo({
25
+ src: url,
26
+ success,
27
+ fail,
28
+ complete
29
+ }).then((res) => {
30
+ const expectRes = {
31
+ width,
32
+ height,
33
+ path: url,
34
+ orientation: 'up',
35
+ type: ''
36
+ }
37
+ expect(success.mock.calls.length).toBe(1)
38
+ expect(success.mock.calls[0][0]).toMatchObject(expectRes)
39
+ expect(fail.mock.calls.length).toBe(0)
40
+ expect(complete.mock.calls.length).toBe(1)
41
+ expect(complete.mock.calls[0][0]).toMatchObject(expectRes)
42
+ expect(res.width).toEqual(width)
43
+ expect(res.height).toEqual(height)
44
+ expect(res.path).toEqual(url)
45
+ })
46
+ })
47
+ })
48
+
49
+ describe('saveImageToPhotosAlbum', () => {
50
+ test('能够正常保存图片', () => {
51
+ const url = 'test.io/a.png'
52
+ const expectMsg = 'saveImageToPhotosAlbum:ok'
53
+
54
+ const success = jest.fn()
55
+ const fail = jest.fn()
56
+ const complete = jest.fn()
57
+
58
+ expect.assertions(6)
59
+ return Taro.saveImageToPhotosAlbum({
60
+ filePath: url,
61
+ success,
62
+ fail,
63
+ complete
64
+ }).then((res) => {
65
+ const path = `photo://${url}`
66
+ expect(success.mock.calls.length).toBe(1)
67
+ expect(success.mock.calls[0][0]).toEqual({ errMsg: expectMsg, path })
68
+ expect(fail.mock.calls.length).toBe(0)
69
+ expect(complete.mock.calls.length).toBe(1)
70
+ expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectMsg, path })
71
+ // @ts-ignore
72
+ expect(res.path).toEqual(path)
73
+ })
74
+ })
75
+ })
76
+
77
+ describe('saveVideoToPhotosAlbum', () => {
78
+ test('能够正常保存视频', () => {
79
+ const url = 'test.io/a.mp4'
80
+ const expectMsg = 'saveVideoToPhotosAlbum:ok'
81
+
82
+ const success = jest.fn()
83
+ const fail = jest.fn()
84
+ const complete = jest.fn()
85
+
86
+ expect.assertions(6)
87
+ return Taro.saveVideoToPhotosAlbum({
88
+ filePath: url,
89
+ success,
90
+ fail,
91
+ complete
92
+ }).then((res) => {
93
+ const path = `video://${url}`
94
+ expect(success.mock.calls.length).toBe(1)
95
+ expect(success.mock.calls[0][0]).toEqual({ errMsg: expectMsg, path })
96
+ expect(fail.mock.calls.length).toBe(0)
97
+ expect(complete.mock.calls.length).toBe(1)
98
+ expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectMsg, path })
99
+ // @ts-ignore
100
+ expect(res.path).toEqual(path)
101
+ })
102
+ })
103
+ })
104
+ })
@@ -0,0 +1,57 @@
1
+ import * as network from '../lib/network'
2
+ const Taro = Object.assign({}, network)
3
+
4
+ describe('network', () => {
5
+ describe('getNetworkType', () => {
6
+ test('能正常返回网络类型', () => {
7
+ const networkType = expect.any(String)
8
+ const success = jest.fn()
9
+ const fail = jest.fn()
10
+ const complete = jest.fn()
11
+
12
+ return Taro.getNetworkType({
13
+ success,
14
+ fail,
15
+ complete
16
+ }).then((res) => {
17
+ expect.assertions(6)
18
+ expect(success.mock.calls.length).toBe(1)
19
+ expect(success.mock.calls[0][0]).toEqual({ networkType, errMsg: 'getNetworkType:ok' })
20
+ expect(fail.mock.calls.length).toBe(0)
21
+ expect(complete.mock.calls.length).toBe(1)
22
+ expect(complete.mock.calls[0][0]).toEqual({ networkType, errMsg: 'getNetworkType:ok' })
23
+ expect(res.networkType).toEqual(networkType)
24
+ })
25
+ })
26
+ })
27
+ // mock react_native_1.NativeModules.RNCNetInfo 暂不mock 内部实现,比如事件的发布订阅
28
+ // describe('onNetworkStatusChange', () => {
29
+ // test('能够正常监听网络状态的变化', done => {
30
+ // const networkType = '3g'
31
+ // const networkCb = (res) => {
32
+ // expect(res).toEqual({ networkType, isConnected: true })
33
+ // done()
34
+ // }
35
+ // expect.assertions(1)
36
+
37
+ // Taro.onNetworkStatusChange(networkCb)
38
+ // NetInfo.changeNetworkType('cellular', networkType)
39
+ // NetInfo.fetch().then(state => {
40
+ // console.log("Connection type", state.type)
41
+ // console.log("Is connected?", state.isConnected)
42
+ // })
43
+ // })
44
+
45
+ // test('能返回正确的关于网络状态的判断', done => {
46
+ // const networkType = 'none'
47
+ // const networkCb = (res) => {
48
+ // expect(res).toEqual({ networkType, isConnected: false })
49
+ // done()
50
+ // }
51
+ // expect.assertions(1)
52
+
53
+ // Taro.onNetworkStatusChange(networkCb)
54
+ // NetInfo.changeNetworkType('none')
55
+ // })
56
+ // })
57
+ })
@@ -0,0 +1,25 @@
1
+ import { base64ToArrayBuffer } from '../lib/base64ToArrayBuffer'
2
+ import { arrayBufferToBase64 } from '../lib/arrayBufferToBase64'
3
+
4
+ const Taro = { base64ToArrayBuffer, arrayBufferToBase64 }
5
+
6
+ describe('base64 and arrayBuffer', () => {
7
+ describe('arrayBufferToBase64', () => {
8
+ test('能正常转换为base64', () => {
9
+ const expectBase64 = 'CxZY'
10
+ const arrayBuffer = new Uint8Array([11, 22, 88])
11
+ const base64 = Taro.arrayBufferToBase64(arrayBuffer)
12
+ expect(base64).toBe(expectBase64)
13
+ })
14
+ })
15
+
16
+ describe('base64ToArrayBuffer', () => {
17
+ test('能正常转换为ArrayBuffer', () => {
18
+ const base64 = 'CxZY'
19
+ const arrayBuffer = Taro.base64ToArrayBuffer(base64)
20
+ expect(arrayBuffer[0]).toBe(11)
21
+ expect(arrayBuffer[1]).toBe(22)
22
+ expect(arrayBuffer[2]).toBe(88)
23
+ })
24
+ })
25
+ })
@@ -0,0 +1,31 @@
1
+ import * as phone from '../lib/makePhoneCall'
2
+
3
+ const Taro = Object.assign({}, phone)
4
+
5
+ describe('phone', () => {
6
+ describe('makePhoneCall', () => {
7
+ test('能正常调用电话功能', () => {
8
+ const phoneNumber = '12345678911'
9
+ const success = jest.fn()
10
+ const fail = jest.fn()
11
+ const complete = jest.fn()
12
+
13
+ expect.assertions(6)
14
+
15
+ return Taro.makePhoneCall({
16
+ phoneNumber,
17
+ success,
18
+ fail,
19
+ complete
20
+ }).then((res) => {
21
+ const expectMsg = 'makePhoneCall:ok'
22
+ expect(success.mock.calls.length).toBe(1)
23
+ expect(success.mock.calls[0][0]).toEqual({ errMsg: expectMsg })
24
+ expect(fail.mock.calls.length).toBe(0)
25
+ expect(complete.mock.calls.length).toBe(1)
26
+ expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectMsg })
27
+ expect(res.errMsg).toMatch(expectMsg)
28
+ })
29
+ })
30
+ })
31
+ })
@@ -0,0 +1,146 @@
1
+ import * as request from '../lib/request'
2
+
3
+ const Taro = Object.assign({}, request)
4
+
5
+ describe('request', () => {
6
+ beforeEach(() => {
7
+ const fetch = jest.fn(() => {
8
+ return new Promise((resolve) => {
9
+ resolve({
10
+ ok: true,
11
+ status: 200,
12
+ headers: {},
13
+ json: () => {
14
+ return Promise.resolve({ data: 'calorie' })
15
+ },
16
+ text: () => {
17
+ return Promise.resolve('卡路里卡路里卡路')
18
+ }
19
+ })
20
+ })
21
+ })
22
+ // @ts-ignore
23
+ global.fetch = fetch
24
+ })
25
+
26
+ describe('request', () => {
27
+ // taro@3 不支持
28
+ // test('直接传入url时能正常返回', async () => {
29
+ // const expectData = { data: 'calorie' }
30
+
31
+ // const url = 'https://test.taro.com/v1'
32
+ // const res = await Taro.request(url)
33
+
34
+ // expect(res.data).toEqual(expectData)
35
+ // })
36
+
37
+ test('接口数据返回json对象', async () => {
38
+ const expectData = { data: 'calorie' }
39
+
40
+ const url = 'https://test.taro.com/v1'
41
+ const options = {
42
+ url,
43
+ dataType: 'json'
44
+ }
45
+ const res = await Taro.request(options)
46
+
47
+ expect(res.data).toEqual(expectData)
48
+ })
49
+
50
+ test('接口数据返回text', async () => {
51
+ const expectData = { data: 'calorie' }
52
+
53
+ const url = 'https://test.taro.com/v1'
54
+ const options = {
55
+ url,
56
+ responseType: 'text'
57
+ }
58
+ // @ts-ignore
59
+ const res = await Taro.request(options)
60
+ expect(res.data).toEqual(expectData)
61
+ })
62
+
63
+ it('RN请求入参同于微信小程序', () => {
64
+ const url = 'https://test.taro.com/v1'
65
+ const expectData = JSON.stringify({ data: 'calorie' })
66
+ const options = {
67
+ url,
68
+ dataType: 'json',
69
+ complete: jest.fn(),
70
+ success: (res) => {
71
+ expect(JSON.stringify(res.data)).toMatch(expectData)
72
+ },
73
+ fail: jest.fn()
74
+ }
75
+ Taro.request(options)
76
+ })
77
+
78
+ test('数据被序列化', async () => {
79
+ const fetch = jest.fn((url, params) => {
80
+ return new Promise((resolve) => {
81
+ resolve({
82
+ ok: true,
83
+ status: 200,
84
+ headers: {},
85
+ json: () => {
86
+ return Promise.resolve({ url, params })
87
+ },
88
+ text: () => {
89
+ return Promise.resolve('卡路里卡路里卡路')
90
+ }
91
+ })
92
+ })
93
+ })
94
+ // @ts-ignore
95
+ global.fetch = fetch
96
+
97
+ const url = 'https://test.taro.com/v1'
98
+ const optionsOne = {
99
+ url,
100
+ dataType: 'json',
101
+ data: {
102
+ a: 1
103
+ }
104
+ }
105
+
106
+ const expectUrl = `https://test.taro.com/v1?${encodeURIComponent('a')}=${encodeURIComponent(1)}`
107
+ // @ts-ignore
108
+ const res = await Taro.request(optionsOne)
109
+ expect(res.data.url).toMatch(expectUrl)
110
+
111
+ const optionsTwo = {
112
+ url,
113
+ method: 'post',
114
+ dataType: 'json',
115
+ header: {
116
+ 'content-type': 'application/json;charset=UTF-8'
117
+ },
118
+ data: {
119
+ a: 1
120
+ }
121
+ }
122
+
123
+ const expectBodyOne = JSON.stringify({ a: 1 })
124
+ // @ts-ignore
125
+ const resTwo = await Taro.request(optionsTwo)
126
+ expect(resTwo.data.params.body).toMatch(expectBodyOne)
127
+
128
+ const optionsThree = {
129
+ url,
130
+ method: 'POST',
131
+ dataType: 'json',
132
+ header: {
133
+ 'content-type': 'application/x-www-form-urlencoded'
134
+ },
135
+ data: {
136
+ a: 1
137
+ }
138
+ }
139
+
140
+ const expectBodyTwo = `${encodeURIComponent('a')}=${encodeURIComponent(1)}`
141
+ // @ts-ignore
142
+ const resThree = await Taro.request(optionsThree)
143
+ expect(resThree.data.params.body).toMatch(expectBodyTwo)
144
+ })
145
+ })
146
+ })
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import { RootSiblingParent } from 'react-native-root-siblings';
3
+ import { render, waitFor } from '@testing-library/react-native';
4
+ import { scanCode } from '../lib/scanCode'
5
+
6
+ describe('scanCode', () => {
7
+ it('should render scanCode success', async () => {
8
+ // @ts-ignore
9
+ const { toJSON, getByLabelText } = render(<RootSiblingParent />)
10
+ scanCode()
11
+ await waitFor(() => getByLabelText('Close'));
12
+ expect(toJSON()).toMatchSnapshot()
13
+ })
14
+ })
@@ -0,0 +1,202 @@
1
+ import AsyncStorage from '@react-native-async-storage/async-storage'
2
+ import { setStorage } from '../lib/setStorage'
3
+ import { getStorage } from '../lib/getStorage'
4
+ import { clearStorage } from '../lib/clearStorage'
5
+ import { getStorageInfo } from '../lib/getStorageInfo'
6
+ import { removeStorage } from '../lib/removeStorage'
7
+
8
+ const Taro = {
9
+ setStorage,
10
+ getStorage,
11
+ clearStorage,
12
+ getStorageInfo,
13
+ removeStorage,
14
+ }
15
+
16
+ // NativeModules.RNCAsyncStorage setup mock
17
+ describe('storage', () => {
18
+ describe('setStorage', () => {
19
+ test('should set value into storage', async () => {
20
+ await Taro.clearStorage({})
21
+ const key = 'bar'
22
+ const data = 'foo'
23
+ const success = jest.fn()
24
+ const fail = jest.fn()
25
+ const complete = jest.fn()
26
+
27
+ const res = await Taro.setStorage({
28
+ key,
29
+ data,
30
+ success,
31
+ fail,
32
+ complete
33
+ })
34
+ const expectMsg = 'setStorage:ok'
35
+
36
+ expect.assertions(7)
37
+
38
+ expect(success.mock.calls.length).toBe(1)
39
+ expect(success.mock.calls[0][0]).toEqual({ errMsg: expectMsg })
40
+ expect(fail.mock.calls.length).toBe(0)
41
+ expect(complete.mock.calls.length).toBe(1)
42
+ expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectMsg })
43
+ expect(res.errMsg).toMatch(expectMsg)
44
+
45
+ const getData = await AsyncStorage.getItem(key) || ''
46
+ expect(JSON.parse(getData)).toBe(data)
47
+ })
48
+
49
+ test('should fail when error occur', async () => {
50
+ await Taro.clearStorage({})
51
+ const data = {}
52
+ const success = jest.fn().mockImplementation(() => {
53
+ throw new Error('setStorage:fail')
54
+ })
55
+ const fail = jest.fn()
56
+ const complete = jest.fn()
57
+
58
+ expect.assertions(4)
59
+ // @ts-ignore
60
+ return Taro.setStorage({
61
+ data,
62
+ success,
63
+ fail,
64
+ complete
65
+ }).catch(err => {
66
+ const expectErrMsg = err.errMsg
67
+ expect(fail.mock.calls.length).toBe(1)
68
+ expect(fail.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
69
+ expect(complete.mock.calls.length).toBe(1)
70
+ expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
71
+ })
72
+ })
73
+ })
74
+
75
+ describe('getStorage', () => {
76
+ test('should get value from storage by key', async () => {
77
+ await Taro.clearStorage({})
78
+ const key = 'bar'
79
+ const data = 'foo'
80
+ const success = jest.fn()
81
+ const fail = jest.fn()
82
+ const complete = jest.fn()
83
+
84
+ await AsyncStorage.setItem(key, JSON.stringify(data))
85
+ const res = await Taro.getStorage({
86
+ key,
87
+ success,
88
+ fail,
89
+ complete
90
+ })
91
+ const expectMsg = 'getStorage:ok'
92
+
93
+ expect.assertions(7)
94
+
95
+ expect(success.mock.calls.length).toBe(1)
96
+ expect(success.mock.calls[0][0]).toEqual(res)
97
+ expect(fail.mock.calls.length).toBe(0)
98
+ expect(complete.mock.calls.length).toBe(1)
99
+ expect(complete.mock.calls[0][0]).toEqual(res)
100
+ expect(res.errMsg).toMatch(expectMsg)
101
+ expect(res.data).toBe(data)
102
+ })
103
+ })
104
+
105
+ describe('removeStorage', () => {
106
+ test('能根据key删除Storage里的值', async () => {
107
+ await Taro.clearStorage({})
108
+ const key = 'bar'
109
+ const data = 'foo'
110
+ const success = jest.fn()
111
+ const fail = jest.fn()
112
+ const complete = jest.fn()
113
+
114
+ await AsyncStorage.setItem(key, JSON.stringify(data))
115
+ const getData = await AsyncStorage.getItem(key) || ''
116
+
117
+ expect(JSON.parse(getData)).toBe(data)
118
+
119
+ const res = await Taro.removeStorage({
120
+ key,
121
+ success,
122
+ fail,
123
+ complete
124
+ })
125
+ const expectMsg = 'removeStorage:ok'
126
+
127
+ expect.assertions(8)
128
+
129
+ expect(success.mock.calls.length).toBe(1)
130
+ expect(success.mock.calls[0][0]).toEqual(res)
131
+ expect(fail.mock.calls.length).toBe(0)
132
+ expect(complete.mock.calls.length).toBe(1)
133
+ expect(complete.mock.calls[0][0]).toEqual(res)
134
+ expect(res.errMsg).toMatch(expectMsg)
135
+ // @ts-ignore
136
+ expect(res.data).toBeUndefined()
137
+ })
138
+ })
139
+
140
+ describe('getStorageInfo', () => {
141
+ test('获得正确的StorageInfo', async () => {
142
+ await Taro.clearStorage({})
143
+ const key1 = 'bar'
144
+ const key2 = 'foo'
145
+ const data = 'data'
146
+ const success = jest.fn()
147
+ const fail = jest.fn()
148
+ const complete = jest.fn()
149
+
150
+ await AsyncStorage.setItem(key1, JSON.stringify(data))
151
+ await AsyncStorage.setItem(key2, JSON.stringify(data))
152
+
153
+ const res = await Taro.getStorageInfo({
154
+ success,
155
+ fail,
156
+ complete
157
+ })
158
+ const expectMsg = 'getStorageInfo:ok'
159
+
160
+ expect.assertions(9)
161
+
162
+ expect(success.mock.calls.length).toBe(1)
163
+ expect(success.mock.calls[0][0]).toEqual(res)
164
+ expect(fail.mock.calls.length).toBe(0)
165
+ expect(complete.mock.calls.length).toBe(1)
166
+ expect(complete.mock.calls[0][0]).toEqual(res)
167
+ expect(res.errMsg).toMatch(expectMsg)
168
+ // @ts-ignore
169
+ expect(res.keys).toEqual([key1, key2])
170
+ // @ts-ignore
171
+ expect(res.currentSize).toBe(+(12 / 1024).toFixed(2))
172
+ // @ts-ignore
173
+ expect(res.limitSize).toBe(Infinity)
174
+ })
175
+ })
176
+
177
+ describe('clearStorage', () => {
178
+ test('clearStorage能清楚所有的Storage', async () => {
179
+ await Taro.clearStorage({})
180
+ const key1 = 'bar'
181
+ const key2 = 'foo'
182
+ const data = 'data'
183
+
184
+ await AsyncStorage.setItem(key1, JSON.stringify(data))
185
+ await AsyncStorage.setItem(key2, JSON.stringify(data))
186
+
187
+ const getData1 = await AsyncStorage.getItem(key1) || ''
188
+ const getData2 = await AsyncStorage.getItem(key2) || ''
189
+
190
+ expect(JSON.parse(getData1)).toBe(data)
191
+ expect(JSON.parse(getData2)).toBe(data)
192
+
193
+ await Taro.clearStorage({})
194
+
195
+ const res = await AsyncStorage.getAllKeys()
196
+
197
+ expect.assertions(3)
198
+
199
+ expect(res).toEqual([])
200
+ })
201
+ })
202
+ })
@@ -0,0 +1,69 @@
1
+ import { getSystemInfo } from '../lib/getSystemInfo'
2
+ import { getSystemInfoSync } from '../lib/getSystemInfoSync'
3
+
4
+ const Taro = { getSystemInfo, getSystemInfoSync }
5
+
6
+ describe('system', () => {
7
+ describe('getSystemInfoSync', () => {
8
+ test('能同步返回正确的系统信息', () => {
9
+ const expectRes = {
10
+ brand: expect.any(String),
11
+ model: expect.any(String),
12
+ pixelRatio: expect.any(Number),
13
+ safeArea: expect.any(Object),
14
+ screenWidth: expect.any(Number),
15
+ screenHeight: expect.any(Number),
16
+ windowWidth: expect.any(Number),
17
+ windowHeight: expect.any(Number),
18
+ statusBarHeight: expect.any(Number),
19
+ language: null,
20
+ version: expect.any(String),
21
+ system: expect.any(String),
22
+ platform: expect.any(String),
23
+ fontSizeSetting: expect.any(Number),
24
+ SDKVersion: null
25
+ }
26
+
27
+ const res = Taro.getSystemInfoSync()
28
+ expect(res).toEqual(expect.objectContaining(expectRes))
29
+ })
30
+ })
31
+
32
+ describe('getSystemInfo', () => {
33
+ test('能异步返回正确的系统信息', () => {
34
+ const success = jest.fn()
35
+ const fail = jest.fn()
36
+ const complete = jest.fn()
37
+ const expectRes = {
38
+ brand: expect.any(String),
39
+ model: expect.any(String),
40
+ pixelRatio: expect.any(Number),
41
+ safeArea: expect.any(Object),
42
+ screenWidth: expect.any(Number),
43
+ screenHeight: expect.any(Number),
44
+ windowWidth: expect.any(Number),
45
+ windowHeight: expect.any(Number),
46
+ statusBarHeight: expect.any(Number),
47
+ language: null,
48
+ version: expect.any(String),
49
+ system: expect.any(String),
50
+ platform: expect.any(String),
51
+ fontSizeSetting: expect.any(Number),
52
+ SDKVersion: null
53
+ }
54
+
55
+ expect.assertions(4)
56
+
57
+ return Taro.getSystemInfo({
58
+ success,
59
+ fail,
60
+ complete
61
+ }).then((res) => {
62
+ expect(success.mock.calls.length).toBe(1)
63
+ expect(fail.mock.calls.length).toBe(0)
64
+ expect(complete.mock.calls.length).toBe(1)
65
+ expect(res).toEqual(expect.objectContaining(expectRes))
66
+ })
67
+ })
68
+ })
69
+ })
@@ -0,0 +1,27 @@
1
+ import * as vibrate from '../lib/vibrate'
2
+
3
+ const Taro = Object.assign({}, vibrate)
4
+
5
+ describe('vibrate', () => {
6
+ describe('vibrateShort', () => {
7
+ test('能正常震动', () => {
8
+ const expectMsg = 'vibrateShort:ok'
9
+
10
+ expect.assertions(1)
11
+ return Taro.vibrateShort().then((res) => {
12
+ expect(res.errMsg).toMatch(expectMsg)
13
+ })
14
+ })
15
+ })
16
+
17
+ describe('vibrateLong', () => {
18
+ test('能正常震动', () => {
19
+ const expectMsg = 'vibrateLong:ok'
20
+
21
+ expect.assertions(1)
22
+ return Taro.vibrateLong().then((res) => {
23
+ expect(res.errMsg).toMatch(expectMsg)
24
+ })
25
+ })
26
+ })
27
+ })