在 React-Native 项目中使用 Jest 进行单元测试——对官方文档的修正

2016-07-18 09:14:12 +08:00
 birdgu

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');

最后,jestunmock方法似乎不起作用, Abdullah Bakhsh 给的例子中使用这样的写法:

const ModuleName = require.requireActual('../module-name).default;

以此来获得未经过 mock 的模块,一般用于获得待测试模块。

Abdullah Bakhsh 在 git 上有一个演示项目包含了以上所有代码。

但是,我对于以下这句还有疑问,有待进一步实验:

    "unmockedModulePathPatterns": [
      "node_modules"
    ],
5286 次点击
所在节点    React
1 条回复
HyperSimon
2017-11-05 16:38:39 +08:00
还没写完吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/293111

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX