假设角度应用程序包含两个页面:联系人(包含带有联系人列表的表格和一个“添加新联系人”按钮)和新的联系人页面(带有添加新联系人的表单)。我想写那个场景:
对于这些页面,我的页面对象具有“单击某个按钮”,“输入一些字段”等功能,所有函数都返回promises。
编写测试场景的最佳方法是:使用js链接,如
contactPage.clickAddButton()
.then(function () {
return newContactPage.checkUrl();
})
.then(function () {
return newContactPage.inputData(data);
})
.then(function () {
return newContactPage.clickAddButton();
})
.then(function () {
return checkContact(data);
})
.then(function (succes) {
}, function (error) {
console.error(error);
});
或者我可以这样写:
contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);
将场景分成多个“it”功能是否有意义?
答案 0 :(得分:2)
无需明确解决承诺。量角器有一个Control Flow并自然地处理承诺队列。由于这是一个单一场景,您可以将其保留在单个it()
内,除非您不重复:
contactPage.clickAddButton();
newContactPage.checkUrl();
newContactPage.inputData(data);
newContactPage.clickAddButton();
checkContact(data);
答案 1 :(得分:1)
如果坚持量角器,你应该处理为answered by alecxe。
但是如果你想保持承诺链明确(远离量角器,与app编码格式一致),那么就可以这样重写:
contactPage.clickAddButton()
.then(newContactPage.checkUrl) // Must resolve `data` for next function
.then(newContactPage.inputData)
.then(newContactPage.clickAddButton) // Must resolve `data` for next function
.then(checkContact)
.then(function (success) {
// Test passes...
}, function (error) {
console.error(error);
});
但如果你使用的是量角器,那么将它写成answered by alecxe就更清晰了。