2016-04-21 62 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); 
}); 

這不是一個真正理想的解決方案,但在每個函數似乎解決了我所遇到的問題後添加承諾。