
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" ], 1 HyperSimon 2017-11-05 16:38:39 +08:00 还没写完吧? |