我应该使Protractor E2E测试完全同步

时间:2017-09-13 19:14:51

标签: angular protractor e2e-testing

简介:尝试在Angular 2同步中进行E2E测试

Protractor是Jasmine的包装器,它为E2E测试中的promise提供了一些支持,因此开发人员不必创建大量嵌套的异步回调,async hell。我认为Protractor鼓励开发者让他们的测试同步。

此处的报价:https://blog.liip.ch/archive/2015/01/28/angularjs-end-to-end-testing-with-protractor.html

  

重要的是要注意Protractor完全是异步的,所以   所有API方法都返回promise。在引擎盖下,量角器使用   Selenium的控制流程(待定承诺的队列)允许我们   以伪同步方式编写测试。量角器很聪明   让它全部工作。

这就是人们对此感到困惑的原因。

因此,在某些情况下,开发人员应该在他们的测试中处理异步方法,例如:我需要获取链接的 href 属性,并检查它的末尾是否有ID,所以我必须定义回调以获取属性的值,解析它并且仅在此检查之后如果它有ID或不存在。

$('a').getAttribute("href").then((url) => {
    expect(url.substring(url.lastIndexOf('/'), url.length)).not.toBeNaN();
});

结果,我的测试不再同步和直接了。

问题:我应该将此方法从测试移到Page Object并尝试使其同步吗?

// Page Object

getImageId() {

    let attribute = null;
    let link = element(by.css('app-image-container .edit-image a'));

    link.getAttribute('href').then((data) => { attribute = data; });
    browser.wait(() => { return attribute != null; });

    return attribute;
}

// Test is synchronous now

expect(page.getImageId()).not.toBeNaN();

0 个答案:

没有答案