Reactjs 将react测试呈现程序与<;开关>;原因“;无状态函数组件不能被指定为refs“;警告

Reactjs 将react测试呈现程序与<;开关>;原因“;无状态函数组件不能被指定为refs“;警告,reactjs,react-native,jestjs,Reactjs,React Native,Jestjs,我正在使用react测试呈现程序(16.0.0-beta.5)对自定义react本机组件执行快照测试。此组件包含一个开关组件,它会导致在测试执行期间引发此警告: console.error节点\u modules\fbjs\lib\warning.js:36 警告:无法为无状态函数组件提供引用。尝试访问此ref将失败 检查开关的渲染方法。 处于未知状态(由开关创建) 接通开关 要复制的最小代码: import React from 'react'; import renderer from 'r

我正在使用react测试呈现程序(16.0.0-beta.5)对自定义react本机组件执行快照测试。此组件包含一个开关组件,它会导致在测试执行期间引发此警告:

console.error节点\u modules\fbjs\lib\warning.js:36

警告:无法为无状态函数组件提供引用。尝试访问此ref将失败

检查
开关的渲染方法。
处于未知状态(由开关创建)
接通开关

要复制的最小代码:

import React from 'react';
import renderer from 'react-test-renderer';
import { Switch } from 'react-native';

test('renders correctly', () => {
  const tree = renderer.create(
    <Switch />
  );
});
由于RCTSwitch没有渲染方法,因此会发出警告。
这是错误吗?

无状态组件不支持引用,请创建有状态组件

有关更多详细信息,请参见答案我在测试中添加了
jest.mock('Switch')
,现在它通过了测试


请注意,这样做会从快照中删除交换机组件,但是,由于没有理由测试纯
react native
组件,我认为只要交换机使用的所有功能都单独测试就可以了。

交换机是react native提供的组件,我恐怕无法使其具有状态。此外,警告只会在jest中弹出。如果要在快照中保留
开关
组件,可以执行
jest.mock('Switch',()=>'Switch')
return (
  <RCTSwitch
    {...props}
    ref={(ref) => { this._rctSwitch = ref; }}
    onChange={this._onChange}
  />
);
if (typeof value === 'object' && value !== null && typeof value.render === 'function') {
  // Proceed under the assumption that this is a class instance