首页 文章

使用带有<Switch>的react-test-renderer导致“无状态函数组件无法给出refs”警告

提问于
浏览
1

我正在使用react-test-renderer(16.0.0-beta.5)对自定义React Native组件执行快照测试 . 此组件包含一个Switch组件,该组件会在测试执行期间抛出此警告:

console.error node_modules \ fbjs \ lib \ warning.js:36警告:无法为无状态函数组件提供参考 . 尝试访问此参考将失败 . 检查Switch的render方法 . 在Switch中的Unknown(由Switch创建)

要重现的最小代码:

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

test('renders correctly', () => {
  const tree = renderer.create(
    <Switch />
  );
});

更多细节:问题是由Switch.render使用的本机RCTSwitch组件引起的:

return (
  <RCTSwitch
    {...props}
    ref={(ref) => { this._rctSwitch = ref; }}
    onChange={this._onChange}
  />
);

如您所见,为此组件分配了一个ref . 但是,react-test-renderer使用以下代码检查组件是否为无状态:

if (typeof value === 'object' && value !== null && typeof value.render === 'function') {
  // Proceed under the assumption that this is a class instance

由于RCTSwitch没有render方法,因此会引发警告 . 这是一个错误吗?

2 回答

  • 0

    我在测试中添加了 jest.mock('Switch') ,现在它通过了 .

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

  • 0

    无状态组件不支持refs,创建有状态组件 .

    有关详细信息,请参阅this答案

相关问题