遵循排毒模拟实施但不工作

Posted

技术标签:

【中文标题】遵循排毒模拟实施但不工作【英文标题】: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 没有起作用。下面是我使用的库

    react-native 0.57.8 排毒 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 以进行测试,并将代码错误地放入问题中。已更正代码 你解决了吗?我看到同样的事情。谢谢 【参考方案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】:

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

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

如果还是不行我会的

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

【讨论】:

【参考方案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 ..",

【讨论】:

以上是关于遵循排毒模拟实施但不工作的主要内容,如果未能解决你的问题,请参考以下文章

无法让简单的 COM 项目工作:在哪里以及如何实施?

为自定义打字稿错误实例实施 instanceof 检查?

如何实施综合基准?

排毒和反应 <-> WebView 交互

MySQL优化实施方案

MySQL 优化实施方案