故事:
在我们的测试代码库中,有几个地方断言不同的CSS值等于期望值。通常,这是与颜色、背景颜色、字体相关的样式属性或游标有关的。这个问题是关于如何处理颜色的。
这里有一个目前通过的工作测试示例:
describe("AngularJS home page", function () {
beforeEach(function () {
browser.get("https://angularjs.org/");
});
it("should show a blue Download button", function () {
var downloadButton = element(by.partialLinkText("Download"));
expect(downloadButton.getCssValue("background-color")).toEqual("rgba(0, 116, 204, 1)");
});
});
它检查AngularJS网站上的下载按钮是否具有 0, 116, 204, 1
RGBA值。
现在,如果颜色发生变化,测试将失败,例如:
Expected 'rgba(0, 116, 204, 1)' to equal 'rgba(255, 116, 204, 1)'.
问题:
首先,如您所见,期望值本身并不容易阅读。除非我们在附近加上注释,否则不清楚我们期望看到什么颜色。
另外,错误消息也不够信息化,不清楚实际颜色和期望看到的颜色是什么。
问题:
是否可能改进测试本身和错误消息,使其更易读、信息更丰富,并使用颜色名称而不是颜色RGB/RGBA值?
期望结果:
expect(downloadButton).toHaveBackgroundColor("midnight blue");
期望的错误信息:
Expect 'blue' to equal 'black'
Expect 'dark grey' to equal 'light sea green'
目前,我正在考虑制作一个自定义的jasmine匹配器,它将把RGB/RGBA
值转换为一个自定义的Color
对象,该对象将保留原始值并确定最接近的颜色。 color
npm包看起来非常有前途。
欢迎任何提示。
{ 'red': 'rgba(255, 0, 0, 1)', 'blue': 'rgba(0, 0, 255, 1)' }
并与它们进行匹配。 - Michael Radionov{'warning': 'rgb(255, 0, 0, 1)'}
。尽管如此,这仍然比我想要处理的低,并且人类“视觉”测试可以更好地捕捉布局/渲染缺陷 - 这在不同设备上可能以许多荒谬的方式表现出来 - 比Selenium更好。 - user2864740