birdgu
V2EX  ›  React

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

  •  
  •   birdgu · Jul 18, 2016 · 6153 views
    This topic created in 3593 days ago, the information mentioned may be changed or developed.

    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"
        ],
    
    1 replies    2017-11-05 16:38:39 +08:00
    HyperSimon
        1
    HyperSimon  
       Nov 5, 2017
    还没写完吧?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5145 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 01:13 · PVG 09:13 · LAX 18:13 · JFK 21:13
    ♥ Do have faith in what you're doing.