2016-04-21 64 views
0
Person.prototype.checkAssignmentIncomplete = Person.chain(function (data) { 
var self = this; 

var assignmentPane = self.browser.element(by.id(data.testId + '#' + data.deadline)); 
expect(assignmentPane.isPresent()).toBe(true); 

assignmentPane.click(); 
self.browser.waitForAngular(); 

var foundName = false; 
var promises = []; 
element.all(by.binding('member.user.fullname')).each(function (nameColumn) { 
    var row = nameColumn.element(by.xpath('..')); 
    var promise = nameColumn.getText().then(function (name) { 
     foundName = foundName || data.name === name; 
     if (foundName) { 
      var reviewButton = row.element(by.className('icon')); 
      expect(reviewButton.isPresent()).toBe(false); 
     } 
    }); 
    promises.push(promise); 
}); 

q.all(promises).then(function() { 
    expect(foundName).toBe(true); 
}); 

}); 

我在量角器中的自动化测试有问题,它似乎认为foundName是错误的,我知道一个事实,当它运行它确实是真的。我的结论是,在诺言完成之前,期望函数正在运行。如何在量角器预期运行之前返回承诺?

我想知道如何确保承诺已完成,然后在expect函数中检查foundName?

+0

要解决,你需要的承诺明确运行'$ scope。$ digest()' – Jagrut

+0

感谢您的回答,但我们无法在量角器测试中使用范围。 – MaxwellLynn

+0

'all' /'each'是异步的,对吧? – Bergi

回答

1
var self = this; 

var assignmentPane = self.browser.element(by.id(data.testId + '#' + data.deadline)); 
expect(assignmentPane.isPresent()).toBe(true); 

assignmentPane.click(); 
self.browser.waitForAngular(); 

var foundName = false; 
element.all(by.binding('member.user.fullname')).each(function (nameColumn) { 
    var row = nameColumn.element(by.xpath('..')); 
    nameColumn.getText().then(function (name) { 
     foundName = foundName || data.name === name; 
     if (foundName) { 
      var reviewButton = row.element(by.className('icon')); 
      expect(reviewButton.isPresent()).toBe(false); 
     } 
    }); 
}).then(function() { 
    expect(foundName).toBe(true); 
}); 

这不是一个真正理想的解决方案,但在每个函数似乎解决了我所遇到的问题后添加承诺。