【发布时间】:2021-10-06 10:34:12
【问题描述】:
我在 Angular 中创建了一个模态组件。在单元测试中,模态显示在 DOM 中,如下所示:
但是,我从app-modal2 上的样式开始,其中包括display:none,因此实际呈现的只是模态上方的固定文本——模态的内容被正确省略:
当用户执行调整样式以包含display:block 的操作时,模式的内容就会正确显示。也就是说,代码完全按照我的预期工作。
我对单元测试感到困惑。
那么:为什么我的标题(“Consternation on testing non-inherited-yet-inherited CSS display property”)?
好吧,根据docs,display 属性不会被继承:
使用浏览器开发工具,我确认这是真的:display 属性的后代元素具有除 none 之外的值。因此,即使后代元素受到具有display: none 的祖先的影响,这是因为以祖先为根的子树被删除了——这不被视为继承。好吧,好吧,potayto, potahto... 技术上没有继承,但行为类似。
我的模式的可见性由display 属性控制。根据用户操作将其设置为display: none 或display:block。但这是严格处理可见性,而不是存在。也就是说,#myContent 与 display 值中的任何一个都存在。由于我因此无法测试 #myContent 的存在,因此我必须严格测试可见性。
那么,由于 display 没有被继承,我如何检查某个元素的可见性,由某个祖先的 display 值控制?有没有办法检查任何具有display:none 的祖先?还是有其他方法可以做到这一点?
【问题讨论】:
-
检查显示属性等不属于测试实施细节的范畴吗?您能否改为通过搜索/查询文本
any content here...的存在来进行测试?或类似stackoverflow.com/a/51291842/5385381 -
@ksav 好问题,但没有。在我刚刚进行的编辑中,我解释说该内容将始终存在。
-
我很懊恼地看到我的问题过早地结束了,因为我以为我在问一个明确的问题。啊,语言。尽管如此,我还是改写了它,希望能提高清晰度。 :-)
标签: javascript html css dom jasmine