遵循排毒模拟实施但没有工作

Followed Detox Mock Implementation but not working

我正在关注 advance mocking with detox 上的 Detox 文档。我这样做是因为我想模拟我的 api.js 文件,该文件默认从后端服务器获取数据。我将其命名为 api.e2e.js 的假 api 文件将仅包含返回承诺的 json 数据的函数。不幸的是,假 api 没有启动。下面是我使用的库

  1. 反应本机 0.57.8
  2. 排毒 9.1.2

我也尝试通过 metro 和 build 命令触发 env 变量,但没有成功。

action/restaurants.js

import Api from '../api';

export const getRestaurants = () => {
    return (dispatch) => {
        dispatch(gettingRestaurants());
        Api.get.restaurants()
            .then(resJson => {
                console.log('get response', resJson);
                dispatch(getRestrauntsSucces(resJson));
            }).catch(error => {
                console.log('response error', error)
                dispatch(getRestaurantsFailure(error));
            })
    }
}

api.e2e.js

export default {
    get: {
        restaurants: () => {
            console.log('you are in fake api');
            return new Promise((resolve, reject) => {
                resolve( [
                    {
                        id: 1,
                        name: 'Test Shop',
                        location: 'Johore',
                        category: 'Johore',
                        user_id: 1
                    }
                ])
            })
        },


    }

}

rn-cli.config.js

module.exports = {
    getSourceExts: () => process.env.RN_SRC_EXT ? 
                         process.env.RN_SRC_EXT.split(',') : []
   };

预计将调用假 api 但仍会调用原始 api。

您需要在 运行 测试之前使用 RN_SRC_EXT=e2e.js 启动您的捆绑器。

所以流程应该是: 运行 RN_SRC_EXT=e2e.js react-native start,然后 detox tests。您也可以尝试使用 RN_SRC_EXT=e2e.js in package.json:

来排毒
    "detox": {
        "configurations": {
            "ios.sim.debug": {
                "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/Glitz.app",
                "build": " RN_SRC_EXT=e2e.js xcodebuild...YOUR BUILD",
                "type": "ios.simulator",
                "name": "iPhone X"
            }
        },
        "test-runner": "jest"
    }

这就是我为使模拟文件正常工作所做的工作。

  1. 通过重置缓存重新运行捆绑器。

如果还是不行我会

  1. 删除构建文件并重建整个项目。

我想补充一点,我在使用 Android 配置时遇到了这个问题,这是因为 RN_SRC_EXT 是在 cd 之前指定的,即 NOT 工作:

 "build": "RN_SRC_EXT=e2e.js cd android && ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release && cd ..",

./gradlew 之前将 RN_SRC_EXT 移动到 运行 解决了问题:

"build": "cd android && RN_SRC_EXT=e2e.js ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release && cd ..",