【问题标题】:Followed Detox Mock Implementation but not working遵循排毒模拟实施但不工作
【发布时间】:2019-06-19 04:14:52
【问题描述】:

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

  1. react-native 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。

【问题讨论】:

  • 您创建了一个posts 方法,因为您的e2e 文件只有一个get
  • @Andrew 感谢您指出这一点。实际上,我只是为伪造的 api 创建了 GET 以进行测试,并将代码错误地放入问题中。已更正代码
  • 你解决了吗?我看到同样的事情。谢谢

标签: react-native detox


【解决方案1】:

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

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

    "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"
    }

【讨论】:

    【解决方案2】:

    这就是我使模拟文件工作的方法。

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

    如果还是不行我会的

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

    【讨论】:

      【解决方案3】:

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

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

      将 RN_SRC_EXT 移动到在 ./gradlew 修复问题之前运行:

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

      【讨论】:

        猜你喜欢
        • 2019-04-02
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多