现在有一个名为Quixote的新的CSS单元测试库。它不像视觉上比较图像,而是查看代码。与Selenium不同,您不需要断言特定的样式,相反您可以说一些像“它应该居中”或者“左侧距离这个其他元素的右侧应该再多10像素”的话。
.test1
.test2
#test3
这应该始终作为最终属性:
CSSAttribute1, CSSFinalValue1
CSSAttribute2, CSSFinalValue2
CSSAttribute3, CSSFinalValue3
在JS中设置测试规则的函数可能是:
addCSSUnitTest(".test1, .test2, #test3", "margin-left: 4px; font-size: 8px");
然后我们检查DOM元素是否有这些最终属性。
这一切都是在渲染后用JavaScript完成的。但是无论如何,这并不实际,因为您将不得不构造许多单元测试用例,这会显著增加代码量。
另外,您应该始终拥有一个重置CSS文件以实现跨浏览器的“兼容性”。
一种替代方案是指定您知道应保留其全部属性的CSS类。创建一个DOM选择器列表。使用jQuery直接从CSS类获取CSS类属性,并检查它们是否保留在目标DOM元素中。这种最后一种方法几乎可以完全自动化,但需要更复杂的JavaScript检查器。这个最后一个不会检查ID选择器(例如“#test3”)的CSS,只会检查类(例如“ .test1”)。
Ex : base.css / form.css / article.css etc.
假设我对base.css进行更改,只适用于站点1 => 我可能会破坏站点2的样式。
如果我的CSS框架是基于LESS
或SASS
构建的,则CSS单元测试将更加相关:宏中的更改可能会破坏所有样式。
您可以使用PhantomCSS进行自动视觉比较。然后,您可以创建CSS模块单元测试页面,仅加载基本CSS样式并显示组件的所有状态,但不从其他组件加载CSS。然后,您可以将其与加载所有模块的完整CSS文件进行比较。
getBoundingClientRect
或getComputedStyle
这样的简单工具,配合hyperscript创建快速临时DOM树,你就可以开始测试了。我们编写了tape-css以减少在使用tape进行测试时的样板代码,但在任何测试设置中,堆栈都将类似。单元测试 CSS,取决于您的框架和 CSS 的处理方式。
需要问的问题:
在您的 CSS 中测试给定类 例如,Assert.IsNotNull
获取 CSS 属性并验证其属性。
首先,我会确定 CSS 文件是否存在,然后查找特定类,然后查找指定类中的属性。
我曾经在回归测试中遇到过缺失的类,并立即从以前的发现中修复了它。
目前,判断CSS是否正常工作是通过视觉确定的。到目前为止,测试它的最佳方法是在开发机器上安装多个浏览器。开始使用像Firefox上的Firebug和Web Developer这样的工具,并且在它变成图灵完备之前,不要考虑单元测试CSS。 :-)