Detox 测试中模拟节点模块

问题描述 投票:0回答:2

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

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

react-native testing jestjs e2e-testing detox
2个回答
0
投票

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

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

  1. 我创建了代理文件
    expo-tracking-transparency.ts
    ,它只是再次导出 expo-tracking-transparency 包本身导出的内容:
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 拾取模拟文件而不是辅助文件),您需要使用
    --sourceExts
    选项运行 Metro,在正常文件扩展名之前设置模拟扩展名像这样:
react-native start --sourceExts mock.ts,mock.js,js,json,ts,tsx

Metro 运行后开始您的排毒测试,它应该会拾取您的模拟文件(如果存在)。


0
投票

您可以在构建应用程序时通过简单地将目标模块的路径替换为您的模拟文件来模拟项目中的任何包。这种方法的优点是您不必更改实际代码。例如,如果您想模拟 codepush 包,您可以更改 Metro.config.js 文件:

const defaultResolver = require('metro-resolver').resolve;

// solution for Metro < 0.68
module.exports = {
  resolver: {
    resolveRequest: (context, moduleName, platform, realModuleName) => {
      if (process.env.DETOX_TEST === 'true' && moduleName === 'react-native-code-push') {
        return {
          filePath: `${__dirname}/src/Codepush.mock.js`,
          type: 'sourceFile'
        };
      }

      return defaultResolver(
        {
          ...context,
          resolveRequest: null
        },
        moduleName,
        platform,
        realModuleName,
      );
    }
  }
}

欲了解更多详情,请参阅此答案。另请参阅 metro 文档

© www.soinside.com 2019 - 2024. All rights reserved.