遵循排毒模拟实施但没有工作
Followed Detox Mock Implementation but not working
我正在关注 advance mocking with detox 上的 Detox 文档。我这样做是因为我想模拟我的 api.js 文件,该文件默认从后端服务器获取数据。我将其命名为 api.e2e.js 的假 api 文件将仅包含返回承诺的 json 数据的函数。不幸的是,假 api 没有启动。下面是我使用的库
- 反应本机 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。
您需要在 运行 测试之前使用 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"
}
这就是我为使模拟文件正常工作所做的工作。
- 通过重置缓存重新运行捆绑器。
如果还是不行我会
- 删除构建文件并重建整个项目。
我想补充一点,我在使用 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 ..",
我正在关注 advance mocking with detox 上的 Detox 文档。我这样做是因为我想模拟我的 api.js 文件,该文件默认从后端服务器获取数据。我将其命名为 api.e2e.js 的假 api 文件将仅包含返回承诺的 json 数据的函数。不幸的是,假 api 没有启动。下面是我使用的库
- 反应本机 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。
您需要在 运行 测试之前使用 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"
}
这就是我为使模拟文件正常工作所做的工作。
- 通过重置缓存重新运行捆绑器。
如果还是不行我会
- 删除构建文件并重建整个项目。
我想补充一点,我在使用 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 ..",