量角器waitForAngular()不适用于异步调用

时间:2014-08-26 17:52:06

标签: angularjs unit-testing protractor

我正在为我的应用程序创建模拟测试用例。我不想仅仅为了测试而调用我们的服务端点,因为他们有专门的测试。所以,我正在嘲笑数据并拦截请求。但似乎量角器测试用例对请求响应的时间太早完成。我试过waitForAngular,但似乎对测试没有任何影响。测试仍然失败。

这是我的代码:

  // Adding a metric
 it('should allow the user to add a metric', function() {
    var count = 0;
    element(by.model('p.title')).clear();
    element(by.cssContainingText('.btn', 'Add Metric')).click();

    browser.waitForAngular();

    element.all(by.cssContainingText('.btn-success', 'Add')).first().click(); // Add first metric on list

   // If adding metric fails, retry 5 times before giving up
  while (count < 3 && element(by.buttonText('Retry')).isDisplayed()) {
     element(by.buttonText('Retry')).click();
     count++;
  }

  // If we were able to load the metric data
  if (count < 3) {
     element(by.css('.close')).click();
     expect(element.all(by.repeater('metric in p.metrics')).count()).toBe(1);
  } else {
     element(by.buttonText('Cancel')).click();
  }

}, 20000);

有人可以告诉我,我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

你的时间不会起作用,因为isDisplayed()会返回一个承诺。承诺将始终评估为真实,您的循环将始终单击()。

尝试使用等待。

browser.wait(function() {
  return element(by.buttonText('Retry')).isDisplayed();
});