Detox测试中的模拟节点模块



是否可以使用此处提供的指南模拟node_module:https://github.com/wix/Detox/blob/master/docs/Guide.Mocking.md

我可以模拟一个常规文件,但节点模块也可以吗?如果是,我该怎么做?

要用detox模拟第三方模块,需要创建某种代理模块。然后,您可以创建该文件的模拟版本,然后detox可以提取该文件进行测试。

就我而言,我想模仿世博会跟踪的透明度。

  1. 我创建了我的代理文件expo-tracking-transparency.ts,它只是再次导出包expo跟踪透明度本身导出的内容:
export * from 'expo-tracking-transparency';
  1. 在这个文件旁边(在同一文件夹中(,我创建了一个模拟文件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 };
  1. 现在,为了实现神奇的效果(=让detox选择mock文件而不是helper文件(,您需要使用--sourceExts-选项运行metro,在该选项中,您可以在正常文件扩展名之前设置mock扩展名,如下所示:
react-native start --sourceExts mock.ts,mock.js,js,json,ts,tsx

随着Metro的运行,开始你的排毒测试,如果有模拟文件,它应该会拾取它们。