故事:
在我们的测试代码库中的几个地方,我们断言不同的CSS值等于期望值。通常,这是一个 color
, background-color
, font
相关的样式属性,或 cursor
。这个问题是关于处理颜色。
以下是当前通过的示例工作测试:
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'
目前,我正在考虑制作一个可以转换的自定义茉莉花匹配器 RGB/RGBA
对自定义的价值 Color
保持原始值以及确定最接近颜色的对象。 color
npm包看起来很有前途。
将不胜感激。
量角器使用 茉莉花 默认情况下作为其测试框架,它提供了添加自定义的机制 期望。
所以,你可以这样做:
在您的量角器配置文件中:
var customMatchers = {
toHaveBackgroundColor: function(util, customEqualityTesters) {
compare: function(actual, expected) {
result.pass = util.equals(extractColor(actual), convertToRGB(expected), customEqualityTesters);
result.message = 'Expected ' + actual + ' to be color ' + expected';
}
}
}
jasmine.addMatchers(customMatchers);
function convertToRGB(color) {
// convert a named color to rgb
}
function extractColor(domElement) {
// extract background color from dom element
}
并使用它:
expect(downloadButton).toHaveBackgroundColor("midnight blue");
我没有试过这个,但这是你需要的基本想法。
我得到了基于@Andrew和@Manasov推荐的工作答案。
所以自定义的期望是这样的:
var nameColor = require('name-that-color/lib/ntc');
var rgbHex = require('rgb-hex');
toHaveColor: function() {
return {
compare: function (elem, color) {
var result = {};
result.pass = elem.getCssValue("color").then(function(cssColor) {
var hexColor = rgbHex(cssColor);
var colorName = nameColor.name('#' + hexColor.substring(0, 6).toUpperCase());
result.message = "Expect '" + colorName[1] + "' to equal '" + color + "'";
return colorName[1] === color;
});
return result;
}
}
}
我们需要先安装必要的包:
npm install name-that-color
npm install rgb-hex
我们首先需要转换 rgb
颜色变成十六进制此外,我们必须从颜色中删除alpha name-that-color
实际上它与颜色名称匹配,它可以从中删除 hex
转换。
现在我们可以简单地称之为:
expect(downloadButton).toHaveColor("midnight blue");