React Native中Jest+Enzyme无法查看浅渲染组件值的问题求助
我之前也碰到过类似的情况,明明其他测试都正常跑,偏偏某个组件的浅渲染测试就卡壳,连组件取值都拿不到。结合你提供的代码和描述,大概率是下面几个细节没处理好,你可以逐一排查:
先补全你的渲染代码
你提供的代码里shallow(<...明显没写完,应该是shallow(<SomeComponent {...props} />)才对。如果JSX语法不完整,哪怕控制台没报错,测试也没法正确执行,自然拿不到组件的任何取值。先把这部分补全,确保标签闭合、props传递正确。确认组件的导出与导入匹配
你用的是import { SomeComponent } from '../SomeComponent'这种命名导入,那得确保SomeComponent文件里是命名导出:// SomeComponent.js里的导出要对应 export const SomeComponent = (props) => { /* ... */ }如果组件是用
export default SomeComponent默认导出的,那导入时应该改成import SomeComponent from '../SomeComponent',去掉花括号。检查Enzyme的React Native适配配置
别忽略了Enzyme需要对应版本的适配器才能正常工作:- 先安装对应React版本的适配器,比如React 16用
enzyme-adapter-react-16,React 17+用@wojtekmaj/enzyme-adapter-react-17; - 在测试文件开头或者项目根目录的
setupTests.js里添加配置:import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; // 换成你对应的适配器版本 configure({ adapter: new Adapter() });
要是没配置适配器,Enzyme根本没法正确渲染React Native组件。
- 先安装对应React版本的适配器,比如React 16用
加个调试打印确认渲染结果
哪怕控制台没报错,也可以在测试里加一行打印,看看组件到底有没有渲染出来:it('renders', () => { const props = { name: 'hey' } const shallowWrap = shallow(<SomeComponent {...props} />); console.log(shallowWrap.debug()); // 打印渲染后的组件结构 // 然后尝试简单断言,比如检查props是否传递成功 expect(shallowWrap.prop('name')).toBe('hey'); });通过
debug()输出的内容,你能清楚看到组件是否正确接收了props,有没有渲染出预期的结构。排查Jest的配置规则
看看项目的jest.config.js或者package.json里的Jest配置,确认这个测试文件没有被排除在外,也没有特殊的transform规则导致组件代码没被正确编译。
内容的提问来源于stack exchange,提问作者Brian Schermerhorn

