Прежде всего, снимаю шляпу перед командой и сообществом Protractor за то, что они придумали такую библиотеку для такой сложной задачи, как E2E-тестирование.
У меня есть JS-класс-оболочка вокруг ElementFinder, так как я хотел добавить дополнительные служебные методы для дальнейшей проверки ElementFinder. Когда я возвращаю экземпляр таких объектов класса, я возвращаю его с помощью:
function myFunc(){
var myElement = element(by.binding('plan.name'));
var deferred = protractor.promise.defer();
var myWrapper = new myElementWrapper(myElement);
deferred.fulfill(myWrapper);
return deferred.promise;
}
Позже я ожидаю значение в Jasmine 2.1, используя:
var val=myFunc();
expect(val).not.toBeNull();
Согласно официальной документации от Protractor queen,@juliemr , expect
должен ждать, пока обещание не будет разрешено. Кажется, что он мчится, не останавливаясь. Глядя на экземпляр обещания, сгенерированного моим кодом, я вижу, что он имеет тип: goog.scope.promise.Promise
. В коде Protractor я заметил, что он использует: webdriver.promise.isPromise(res)
. Я также безуспешно пытался обернуть вызов flow.execute
и хотел бы избежать использования серии связанных вызовов .then
, поскольку это делает тест менее читаемым.
Будет ли это должным образом ждать, чтобы выполнить мое обещание выше, прежде чем продолжить тестовый поток?
Если нет, то как правильно создать объект обещания, который будет должным образом проверен ароматом Protractor expect
?
Я использую новую и блестящую версию Protractor 2.0.