在与Protractor和AngularJS进行预期检查之前,我是否需要检查承诺?

时间:2014-09-08 13:01:49

标签: angularjs protractor

我的测试代码如下:

pageLogin(userName: string, password: string) {
    element(by.id('loginUserName')).clear();
    element(by.id('loginPassword')).clear();
    element(by.id('loginUserName')).sendKeys(userName);
    element(by.id('loginPassword')).sendKeys(password);
    element(by.id('loginButton')).click();
    expect(element(by.id('ngApp')).isPresent()).toBe(true);
}

有人可以向我解释。在期待之前,我是否需要等待从函数的前五行返回的promise?此函数内的行是否执行异步?

1 个答案:

答案 0 :(得分:2)

Protractor使用一种名为control flows的方法让您以看起来同步的方式编写测试。实际发生的是调用你在函数内部调用的调用队列,并且只在函数返回时才开始执行。

因此,当您的函数完成运行时,量角器会查看队列并执行第一项,即element(by.id('loginUserName')).clear()语句。当浏览器完成清除loginUserName文本框后,它会发出protractor信号,并且量角器会执行队列中的下一个项目。

在您的示例中,element(by.id('ngApp')).isPresent()将是队列中的最后一项。此调用还返回一个promise,该promise将在从队列中删除此项后执行并返回一个值。

Jasmine的expect()函数已经过调整,因此它不是同步检查值,而是注意到你传递了一个promise,所以它在检查期望之前等待该promise的解析。

最后,一旦队列中的所有项目都已执行,量角器就会完成文本的运行并转到下一个文本。