我正在使用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 回答
我在测试中添加了
jest.mock('Switch')
,现在它通过了 .请注意,这样做会从快照中删除Switch组件,但是由于没有理由测试纯
react-native
组件,我认为只要Switch使用的所有功能都单独测试就可以了 .无状态组件不支持refs,创建有状态组件 .
有关详细信息,请参阅this答案