是否可以使用此处提供的指南模拟node_module:https://github.com/wix/Detox/blob/master/docs/Guide.Mocking.md
我可以模拟一个常规文件,但节点模块也可以吗?如果是,我该怎么做?
要用detox模拟第三方模块,需要创建某种代理模块。然后,您可以创建该文件的模拟版本,然后detox可以提取该文件进行测试。
就我而言,我想模仿世博会跟踪的透明度。
- 我创建了我的代理文件
expo-tracking-transparency.ts
,它只是再次导出包expo跟踪透明度本身导出的内容:
export * from 'expo-tracking-transparency';
- 在这个文件旁边(在同一文件夹中(,我创建了一个模拟文件
expo-tracking-transparency.mock.ts
,它模拟了我需要的功能:
- src/helpers
|__ expo-tracking-transparency.ts
|__ expo-tracking-transparency.mock.ts
import { PermissionResponse, PermissionStatus } from 'expo-tracking-transparency';
const response: PermissionResponse = {
status: PermissionStatus.DENIED,
granted: false,
expires: 'never',
canAskAgain: true,
};
const requestTrackingPermissionsAsync = (): Promise<PermissionResponse> => Promise.resolve(response);
const getTrackingPermissionsAsync = (): Promise<PermissionResponse> => Promise.resolve(response);
export { requestTrackingPermissionsAsync, getTrackingPermissionsAsync };
- 现在,为了实现神奇的效果(=让detox选择mock文件而不是helper文件(,您需要使用
--sourceExts
-选项运行metro,在该选项中,您可以在正常文件扩展名之前设置mock扩展名,如下所示:
react-native start --sourceExts mock.ts,mock.js,js,json,ts,tsx
随着Metro的运行,开始你的排毒测试,如果有模拟文件,它应该会拾取它们。