将多个布尔检查简化为一个布尔检查
Simplifying multiple boolean checks into a single one
在我们的一个测试中,我们有以下一组期望值:
expect(headerPage.dashboard.isDisplayed()).toBe(true);
expect(headerPage.queue.isDisplayed()).toBe(true);
expect(headerPage.claimSearch.isDisplayed()).toBe(true);
expect(headerPage.claim.isDisplayed()).toBe(true);
expect(headerPage.case.isDisplayed()).toBe(true);
expect(headerPage.calendar.isDisplayed()).toBe(true);
一方面,拥有多个简单的期望值可以提供更精确、更容易理解的反馈,但另一方面,这似乎违反了DRY原则和"每次测试一个期望值"普遍接受的准则。
有没有一种方法可以将其转换/简化为单个期望?
headerPage
是页面对象,dashboard
和其他页面对象字段是导航链接
我认为您误解了"每次测试一个期望"准则的目的。重点不是把一堆期望组合成一个期望,而是把你的期望分成单独的测试。
为了遵循该指南的精神,你可以这样写你的测试:
describe("The header page", function () {
var headerPage;
beforeEach(function () {
//Common logic here
});
it("displays the dashboard", function () {
expect(headerPage.dashboard.isDisplayed()).toBe(true);
});
it("displays the queue", function () {
expect(headerPage.queue.isDisplayed()).toBe(true);
});
it("displays the claimSearch", function () {
expect(headerPage.claimSearch.isDisplayed()).toBe(true);
});
//etc.
});
这比你现有的要详细得多;但这就是为什么这些是指导方针而不是规则。这是在测试的冗长程度和以后调试的容易程度之间进行权衡。("首页显示仪表板:FAILED")是一个非常清晰和具体的测试失败消息,与获得相同的失败消息相比,无论哪种期望实际失败。
我绝对不会试图将所有这些行合并为一行。如果你不想把它分成一堆不同的测试用例,我就顺其自然
替代方法。我最终添加了一个页面对象方法,该方法返回当前可见导航链接的标签:
this.getVisibleLinks = function () {
return $$(".ap-header-nav-tabs li a").filter(function (link) {
return link.isDisplayed();
}).getText();
};
然后,上面的测试将被转换为一个简洁易读的:
expect(headerPage.getVisibleLinks()).toEqual(["Dashboard", "Queue", "Claim Search", ...]);
如果这是您在多个规范中使用的逻辑,您可以查看jasmine自定义匹配器来封装逻辑。
它会写得有点像这样:
var customMatchers = {
toDisplayWidgets: function(util, customEqualityTests) {
return {
compare: function(actual, expected) {
function isDisplayingWidgets(page) {
return page.dashboard.isDisplayed() &&
page.queue.isDisplayed() &&
page.claimSearch.isDisplayed() &&
page.claim.isDisplayed() &&
page.case.isDisplayed() &&
page.calendar.isDisplayed();
}
var result = {};
result.pass = isDisplayingWidgets(actual);
if (!result.pass) {
result.message = 'dashboard is not displayed';
}
return result;
}
}
}
将匹配器添加到您当前的测试
jasmine.addMatchers(customMatchers);
然后在你的测试中,你可以用断言
expect(headerPage).toDisplayWidgets();
使用一个返回所有测试结果的辅助函数,比如,怎么样
expect(headerDisplayTests()).toBe(true);
function headerDisplayTests() {
return headerPage.dashboard.isDisplayed() &&
headerPage.queue.isDisplayed() &&
headerPage.claimSearch.isDisplayed() &&
headerPage.claim.isDisplayed() &&
headerPage.case.isDisplayed() &&
headerPage.calendar.isDisplayed();
}
相关文章:
- 将多个布尔检查简化为一个布尔检查
- jquery -ajax 不检查控制器的布尔值
- 如何检查类型是否为布尔值
- 检查布尔值并将其转换为对象中的数字
- 检查对象数组是否包含布尔值true/false
- Javascript 检查字符串是否为真或假,并转换为布尔值
- 检查布尔键是否存在并将其包含在 if 语句中的最有效方法
- !!Sytactic Sugar,用于检查JavaScript中未定义的布尔值
- 检查布尔 jquery
- 下划线模板中的布尔检查
- 检查隐藏的布尔值以运行方法
- 检查执行布尔值或使用尝试/捕获 PDO
- 多维布尔数组检查 Javascript 中是否全部为真
- 在默认条件下检查布尔值
- 通过选择器检查对象是否存在,使用jQuery或Javascript返回布尔值
- 只检查一个布尔选项集
- 如何在Meteor的自定义验证简单模式中检查布尔值是否为真
- Javascript页面是否完全加载布尔检查
- 如何检查eval()上的布尔值或算术运算是否为假?
- 存储一个布尔值或整型值,并在页面加载后检查/更改它的值