React-Native
当前版本( 0.29 )官方网站上对于使用 jest 进行单元测试的说明
多有错误,依言行之,肯定是做不出来的。在网上搜索良久,关于使用 jest 对
React-Native 进行单元测试的文章也有不少,但是都是针对比较旧的版本,已经过时
了。幸好后来找到 StackOverflow 上
这个问题
下 Abdullah Bakhsh 的回答,才算解决了问题。在此将其答案翻译、整理如下:
首先是package.json
文件其中的jest
配置,这部分React-Native
官网上的说明是错误的。
"jest": {
"scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
"unmockedModulePathPatterns": [
"node_modules"
],
"verbose": true,
"collectCoverage": true
},
第二步是安装必要的 npm module:
npm install --save-dev babel-jest
npm install --save-dev babel-plugin-tranform-regenerator
npm install --save-dev babel-preset-react-native
npm install --save-dev jest-cli
npm install --save-dev react-addons-test-utils
npm install --save-dev react-native-mock
第三步创建 .babelrc
文件
{
"presets": ["react-native"],
"plugins": [
"transform-regenerator"
]
}
第四步创建__mocks__/react-native.js
文件:
module.exports = require('react-native-mock');
最后,jest
的unmock
方法似乎不起作用, Abdullah Bakhsh 给的例子中使用这样的写法:
const ModuleName = require.requireActual('../module-name).default;
以此来获得未经过 mock 的模块,一般用于获得待测试模块。
Abdullah Bakhsh 在 git 上有一个演示项目包含了以上所有代码。
但是,我对于以下这句还有疑问,有待进一步实验:
"unmockedModulePathPatterns": [
"node_modules"
],
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.