В одном из тестов нам нужно утверждать, что присутствует один из трех элементов. В настоящее время мы делаем это с помощью 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);
});
Есть ли лучший способ решить эту проблему с Жасмин без разрешения обещаний явно? Нужен ли нам специальный счетчик или его можно решить с помощью встроенных помощников?
Обратите внимание, что вместо 'reduce' вы можете использовать' arrExists.some (function (a) {return a;}) '. С Jasmine вы должны использовать аргумент ['done' в' it' callback] (http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support) и называть его, когда вы закончите с тестом , Я не думаю, что есть лучший способ. Вам все равно нужно ждать обещаний. – trincot
@ trincot спасибо за точку. Вероятно, я должен был упомянуть, что ['expect()' исправлено "в Protractor для неявного решения обещаний] (http://www.protractortest.org/#/control-flow#protractor-adaptations) .. но так как я должны сочетать результаты нескольких обещаний друг с другом, в этом случае это может не помочь. – alecxe
Вы должны указать 'false' как начальное значение, чтобы оно также работало и на пустых массивах. Или просто используйте '.some (Boolean)' вместо этого. – Bergi