在其中一個測試中,我們需要聲明其中一個元素存在。目前我們使用的protractor.promise.all()
和Array.reduce()
這樣做:斷言數組減少爲真
var title = element(by.id("title")),
summary = element(by.id("summary")),
description = element(by.id("description"));
protractor.promise.all([
title.isPresent(),
summary.isPresent(),
description.isPresent()
]).then(function (arrExists) {
expect(arrExists.reduce(function(a,b) { return a || b; })).toBe(true);
});
有沒有更好的辦法與茉莉花來解決這個問題沒有明確解決的承諾?我們需要一個自定義匹配器還是可以用內置匹配器解決?
請注意,您可以使用'arrExists.some(function(a){return a;})'而不是'reduce'。使用Jasmine,你可以在'it'回調函數中使用['done'參數](http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support),當你完成測試時調用它。我不認爲有更好的辦法。無論如何您需要等待承諾解決。 – trincot
@trincot感謝您的觀點。我應該可能已經提到['expect()'在量角器中被「修補」來隱含地解決承諾](http://www.protractortest.org/#/control-flow#protractor-adaptations)..但是因爲我必須將多重承諾的結果彼此結合起來,但在這種情況下可能無濟於事。 – alecxe
您應該提供'false'作爲初始值,以便它可以在空數組上工作。或者使用'.some(布爾)'代替。 – Bergi