@unif/react-native-camera 2.3.0 → 2.4.0

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.
package/README.md CHANGED
@@ -99,6 +99,29 @@ const App = () => {
99
99
  | `data` | `CustomPhotoFile[]` | 拍摄的文件列表 |
100
100
  | `message` | `string` | 描述信息 |
101
101
 
102
+ ## 测试 (Mock)
103
+
104
+ 本库依赖 `react-native-vision-camera` 等 native 模块,jest 环境无法直接加载。消费者在测试里 mock 本库:
105
+
106
+ ```js
107
+ jest.mock('@unif/react-native-camera', () =>
108
+ require('@unif/react-native-camera/mock')
109
+ );
110
+ ```
111
+
112
+ mock 后 `useCamera()` 返回 `[api, null]`,`api.open` / `api.close` 是 `jest.fn`,`open` 默认 resolve `{ code: 0, data: [], message: 'cancelled' }`。按需覆盖单次返回:
113
+
114
+ ```ts
115
+ const [api] = useCamera();
116
+ (api.open as jest.Mock).mockResolvedValueOnce({
117
+ code: 200,
118
+ data: [{ path: '/x.jpg', uri: 'file:///x.jpg', width: 1, height: 1, mime: 'image/jpeg', mode: 'single' }],
119
+ message: 'ok',
120
+ });
121
+ ```
122
+
123
+ 工具函数(`toFileUri` / `buildPhotoFile` 等)与所有类型在 mock 中保留真实实现。
124
+
102
125
  ## 从 v1.x 升级
103
126
 
104
127
  `v2.0.0` 的破坏性变更:
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ // Jest mock for @unif/react-native-camera —— 供消费者在测试中替换本库,
4
+ // 避免 jest 环境加载不到 vision-camera 等 native 模块而崩溃。
5
+ //
6
+ // 用法(消费者 jest setup 或单个测试文件):
7
+ //
8
+ // jest.mock('@unif/react-native-camera', () =>
9
+ // require('@unif/react-native-camera/mock')
10
+ // );
11
+ //
12
+ // 替换后 useCamera() 返回 [api, null]:api.open / api.close 是 jest.fn,
13
+ // open 默认 resolve { code: 0, data: [], message: 'cancelled' }。
14
+ // 消费者可按需覆盖单次返回:
15
+ //
16
+ // const [api] = useCamera();
17
+ // (api.open as jest.Mock).mockResolvedValueOnce({
18
+ // code: 200, data: [{ path: '/x.jpg', uri: 'file:///x.jpg', width: 1, height: 1,
19
+ // mime: 'image/jpeg', mode: 'single' }], message: 'ok',
20
+ // });
21
+
22
+ // 类型 + 纯工具函数(toFileUri / buildPhotoFile / depsAreSame / pxToDp)保留真实实现 ——
23
+ // 它们不碰 native,消费者测试里跑真实逻辑比 mock 更有意义。
24
+ export * from "./utils/index.js";
25
+
26
+ // 与 src/index.tsx 保持一致;mock 不能 import index(会触发 native 依赖链,失去 mock 意义)。
27
+ export const VERSION = '2.0.0';
28
+ const cancelled = {
29
+ code: 0,
30
+ data: [],
31
+ message: 'cancelled'
32
+ };
33
+ export function useCamera() {
34
+ const api = {
35
+ open: jest.fn(async () => cancelled),
36
+ close: jest.fn()
37
+ };
38
+ return [api, null];
39
+ }
40
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["VERSION","cancelled","code","data","message","useCamera","api","open","jest","fn","close"],"sourceRoot":"../../src","sources":["mock.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA,cAAc,kBAAS;;AAEvB;AACA,OAAO,MAAMA,OAAO,GAAG,OAAO;AAE9B,MAAMC,SAAuB,GAAG;EAAEC,IAAI,EAAE,CAAC;EAAEC,IAAI,EAAE,EAAE;EAAEC,OAAO,EAAE;AAAY,CAAC;AAE3E,OAAO,SAASC,SAASA,CAAA,EAAsB;EAC7C,MAAMC,GAAc,GAAG;IACrBC,IAAI,EAAEC,IAAI,CAACC,EAAE,CAAC,YAAYR,SAAS,CAAsB;IACzDS,KAAK,EAAEF,IAAI,CAACC,EAAE,CAAC;EACjB,CAAC;EACD,OAAO,CAACH,GAAG,EAAE,IAAI,CAAC;AACpB","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import type { CameraApi } from './utils';
2
+ export * from './utils';
3
+ export declare const VERSION = "2.0.0";
4
+ export declare function useCamera(): [CameraApi, null];
5
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/mock.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,SAAS,CAAC;AAIvD,cAAc,SAAS,CAAC;AAGxB,eAAO,MAAM,OAAO,UAAU,CAAC;AAI/B,wBAAgB,SAAS,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAM7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-camera",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "基于 react-native-vision-camera 的相机库(单拍/连拍/视频+水印+预览)",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -10,6 +10,11 @@
10
10
  "types": "./lib/typescript/src/index.d.ts",
11
11
  "default": "./lib/module/index.js"
12
12
  },
13
+ "./mock": {
14
+ "source": "./src/mock.ts",
15
+ "types": "./lib/typescript/src/mock.d.ts",
16
+ "default": "./lib/module/mock.js"
17
+ },
13
18
  "./package.json": "./package.json"
14
19
  },
15
20
  "files": [
package/src/mock.ts ADDED
@@ -0,0 +1,37 @@
1
+ // Jest mock for @unif/react-native-camera —— 供消费者在测试中替换本库,
2
+ // 避免 jest 环境加载不到 vision-camera 等 native 模块而崩溃。
3
+ //
4
+ // 用法(消费者 jest setup 或单个测试文件):
5
+ //
6
+ // jest.mock('@unif/react-native-camera', () =>
7
+ // require('@unif/react-native-camera/mock')
8
+ // );
9
+ //
10
+ // 替换后 useCamera() 返回 [api, null]:api.open / api.close 是 jest.fn,
11
+ // open 默认 resolve { code: 0, data: [], message: 'cancelled' }。
12
+ // 消费者可按需覆盖单次返回:
13
+ //
14
+ // const [api] = useCamera();
15
+ // (api.open as jest.Mock).mockResolvedValueOnce({
16
+ // code: 200, data: [{ path: '/x.jpg', uri: 'file:///x.jpg', width: 1, height: 1,
17
+ // mime: 'image/jpeg', mode: 'single' }], message: 'ok',
18
+ // });
19
+
20
+ import type { CameraApi, CameraResult } from './utils';
21
+
22
+ // 类型 + 纯工具函数(toFileUri / buildPhotoFile / depsAreSame / pxToDp)保留真实实现 ——
23
+ // 它们不碰 native,消费者测试里跑真实逻辑比 mock 更有意义。
24
+ export * from './utils';
25
+
26
+ // 与 src/index.tsx 保持一致;mock 不能 import index(会触发 native 依赖链,失去 mock 意义)。
27
+ export const VERSION = '2.0.0';
28
+
29
+ const cancelled: CameraResult = { code: 0, data: [], message: 'cancelled' };
30
+
31
+ export function useCamera(): [CameraApi, null] {
32
+ const api: CameraApi = {
33
+ open: jest.fn(async () => cancelled) as CameraApi['open'],
34
+ close: jest.fn() as CameraApi['close'],
35
+ };
36
+ return [api, null];
37
+ }