我正在使用材料表连同材料ui来创建一个电子表格应用程序。我实现的一个行为是单元格的最大宽度为50px。如果该单元格的内容太大,它将默认在单词的末尾使用省略号(参见启用了noWrap prop的排版材料-UI组件)。如果此单元格悬停,将呈现一个弹出窗口,显示单元格的全部内容。它通过检查scrollWidth>clientWidth来检查单元格是否溢出,如果是,则启用onMouseEnter和onMouseLeave行为来显示和隐藏弹出窗口。一切正常。我的问题是,我很难在使用jest/react-test-library编写的测试中复制这种行为。当我调用react-testing render方法时,它不会输出溢出行为,即使在cell组件中有一个很长的值。这是因为它是在虚拟呈现,而不是在浏览器中实际呈现吗?如果是的话,我有没有办法强迫溢出行为?我已经附加了我的当前组件,连同计算溢出函数和当前测试。
const calculateOverflow = element => {
return element ? element.scrollWidth > element.clientWidth : false;
}
export default function OverflowCell(props) {
const typeRef = useRef();
const { value } = props;
const classes = useStyles(props);
const [anchorEl, setAnchorEl] = React.useState(null);
const handlePopoverOpen = event => {
setAnchorEl(event.currentTarget);
};
const handlePopoverClose = () => {
setAnchorEl(null);
};
const isOverflowing = calculateOverflow(typeRef.current);
const open = Boolean(anchorEl);
return (
<div>
<Typography
ref={typeRef}
aria-owns={open ? 'mouse-over-popover' : undefined}
aria-haspopup={isOverflowing ? 'true' : 'false'}
aria-label={isOverflowing ? 'overflowCell' : 'cell'}
onMouseEnter={isOverflowing ? handlePopoverOpen : undefined}
onMouseLeave={isOverflowing ? handlePopoverClose : undefined}
className={classes.overFlowText}
noWrap
>
{value}
</Typography>
{isOverflowing && (
<Popover
className={classes.popover}
classes={{
paper: classes.paper,
}}
open={open}
anchorEl={anchorEl}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'left',
}}
transformOrigin={{
vertical: 'top',
horizontal: 'left',
}}
onClose={handlePopoverClose}
disableRestoreFocus
>
<Typography>{value}</Typography>
</Popover>
)}
</div>
);
}
it('triggers popover when overflowing string is hovered', async () => {
const cellValue = 'test value that is very longggggggggggggggggggggggggggggggggggggggggg';
const divStyle = {
'max-width': '10',
};
mockRowData[0].forname = cellValue;
const { asFragment, getByLabelText } = render(
<div style={divStyle}>
<OverflowCell value={cellValue} />
</div>,
);
const initialRender = asFragment();
const overflowCell = getByLabelText('cell');
Simulate.mouseEnter(overflowCell);
await delay(500);
expect(initialRender).toMatchDiffSnapshot(asFragment());
Simulate.mouseLeave(overflowCell);
await delay(500);
expect(initialRender).toMatchSnapshot(asFragment());
});
我认为这是因为单元测试没有在真正的浏览器中运行。所以它不执行CSS,也没有滚动。
问题内容: 我对模拟还很陌生,并且我一直在尝试模拟实际内容(本质上仅在内存中创建一个虚拟文件),以便在任何时候都不会将任何数据写入磁盘。 我尝试过模拟文件和模拟尽可能多的属性的解决方案,然后还使用文件写入器/缓冲写入器将其写入,但是这些方法不能很好地工作,因为它们需要规范路径。有人找到了除此以外的解决方案,但我正在解决这个错误? 我一直在这样做: 任何想法或指导都将非常有帮助。在此之后的某个地方,
问题内容: 说我有一个包含以下内容的模块: 我想为下半部分编写一个单元测试(我想实现100%的覆盖率)。我发现执行导入/设置机制的内置的 runpy 模块,但无法弄清楚如何模拟或检查 main() 函数是否被调用。 到目前为止,这是我尝试过的: 问题答案: 我将选择另一种替代方法,将其从覆盖率报告中排除,当然,只有在测试中已经具有main()函数的测试用例的情况下,您才能这样做。 至于为什么我选择
我正在使用反应和电子构建桌面应用程序。由于它增长迅速,我意识到我需要某种状态管理,如Redux,以避免在组件之间传递许多属性。我开始阅读Redux官方留档,但仍然不知道如何在我的情况下实现它。我卡住了! 例如,我有一个呈现许多子组件的主组件。其中一个有按钮。点击后,它应该向商店发送一个“事件”,以便主可以执行相应的操作。我怎样才能做到这一点?我找不到事件的概念,我已经在如何开始使用Redux上碰壁
问题内容: 我试图弄清楚如何对我的控制器的URL进行适当安全的单元测试。以防万一有人更改周围的内容并意外删除安全设置。 我的控制器方法如下所示: 我像这样设置一个WebTestEnvironment: 在我的实际测试中,我尝试执行以下操作: JUnit如何测试@PreAuthorize批注及其由spring MVC控制器指定的spring EL? 但是,如果仔细观察,这仅在不向URL发送实际请求时
问题内容: App.js App.test.js 这个最小的示例在浏览器中可以正常工作,但是测试失败。我认为没有调用onChange处理程序。如何在测试中触发onChange回调?查找fireEvent元素的首选方法是什么?谢谢 问题答案: 这一定是关于RTL的最常见的问题:D 最好的策略是使用(或测试框架中的等效方法)模拟选择并呈现HTML选择。 有关为什么这是最佳方法的更多信息,我也写了一些适
问题内容: 使用PHP如何模仿的自动链接行为(哪个BTW非常酷)? 在这种情况下,我不太在意属性。 转换成这样: 如何在PHP中创建类似的功能? PS:请查看我对此问题的评论,以获取更多示例和行为。 问题答案: 试试看 URL匹配的正则表达式模式来自DaringFireball。 输入文本: