【发布时间】:2017-02-07 13:37:56
【问题描述】:
我在用量角器编写的端到端测试中使用 Jasmine。我正在尝试创建页面对象抽象,以用作我的解决方案中定义的其他页面对象的基类。
由于我的应用程序是基于经典表单的解决方案,因此我可以将编辑页面的常见行为收集到基类中。为了更接近 M** 模式 - 我想将我的抽象视图与具体模型联系起来。
所以我的基本页面对象视图看起来像:
export class EditPageBase<T> {
constructor(T model) {
this.model = model;
}
fillForm() {
...
}
checkForm() {
...
}
}
其中 T - 与此视图相关的类模型。
这种方法允许我使用模型结构并直接映射到我的视图。所以模型中定义的任何属性在我看来都有对应的表示。
所以我可以使用下一个语法将我的模型映射到视图:
for(let prop in this.model) {
let ctrl = this.getControl(prop);
ctrl.sendKeys(this.model[prop]);
}
所以我的表单有多复杂并不重要——我只需要正确定义我的模型。
我在请求页面数据时检查表单数据作为量角器返回承诺时遇到的问题:
for(let prop in this.model) {
let ctrl = this.getControl(prop);
expect(ctrl.getAttribute('value')).toEqual(this.model[prop] || '');
}
这段代码不时抛出:
Jasmine 规范超时。重置 WebDriver 控制流。
错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。
我知道为什么会发生这种情况 - 因为我的循环可以提前结束,承诺将解决。我不知道如何处理这种情况。我不想创建 Promise 链或其他 Promise.all 包装器,因为 Jasmine 与 Promise 配合得很好,所以我想在这里保持代码干净。
也许有人以前遇到过这个问题,可以在这里分享一些如何使用茉莉花力量而不是切换到承诺地狱的想法。
【问题讨论】:
标签: javascript testing jasmine protractor angularjs-e2e