在我们的一项测试中,我们有以下一系列期望:
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
和其他页面对象字段是导航链接。功能
答案 0 :(得分:15)
我认为你误解了每次测试的预期目标"指南。关键在于将一系列期望结合到一个单一的期望中,而是将您的期望分成单独的测试。
要遵循该指南的精神,您可以编写如下测试:
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")是一个非常明确和特定的测试失败消息,与获得相同的失败消息相比,无论实际失败的是哪个期望。
我绝对不会尝试将所有这些线组合成一行。如果你不想将它分成许多不同的测试用例,我会留下它的样子。
答案 1 :(得分:1)
替代方法。我最终得到的是添加页面对象方法,该方法返回当前可见导航链接的标签:
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", ...]);
答案 2 :(得分:1)
如果这是您在多个规范中使用的逻辑,那么您可以查看jasmine custom matchers来封装逻辑。
它的写法有点像这样:
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();
答案 3 :(得分:-1)
如何使用返回所有测试结果的辅助函数,如
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();
}