Enzyme.js中wrapper.find(selector)是否支持使用变量作为选择器?
问题原因与修复方案
报错的核心原因是for...in循环会默认遍历对象原型链上的所有可枚举属性,并不局限于你手动定义在entryData上的.time、.key、.status三个自有属性。当循环拿到原型链上的其他属性值作为选择器时,自然找不到对应的DOM节点,就会触发「找到0个节点,无法调用text()方法」的报错。
Enzyme的find方法完全支持传入字符串类型的变量作为选择器,和硬编码字符串的使用效果完全一致,该问题属于JavaScript对象遍历的常见问题,和Enzyme本身无关。
修复方法1:添加自有属性校验
在循环内增加hasOwnProperty判断,过滤掉原型链继承的属性:
for (let entry in entryData) { if (entryData.hasOwnProperty(entry)) { expect(wrapper.find(entry).text()).to.be.equal(entryData[entry]); } }
修复方法2:使用Object.entries遍历(更推荐)
直接用Object.entries获取对象自身的键值对,从根源上避免原型链干扰:
for (const [selector, expectedText] of Object.entries(entryData)) { expect(wrapper.find(selector).text()).to.be.equal(expectedText); }
内容的提问来源于stack exchange,提问作者bakrall
相关产品推荐
相关产品推荐

