2015-04-14 2 views
3

Прежде всего, шляпы от команды и сообщества Protractor для создания такой библиотеки для решения сложных задач, таких как тестирование E2E.Может ли адаптация адаптера жасмина должным образом ждать protractor.promise.defer(). Обещание?

У меня есть оболочка класса 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(); 

Согласно the official documentation по транспортир ферзя, @juliemr, тем expect должен ждать, пока обещание не будет разрешено. Кажется, он безмолвно горит. Глядя на экземпляр обещания, который создал мой код, я вижу, что он имеет тип: goog.scope.promise.Promise. В коде Protractor я заметил, что он использует: webdriver.promise.isPromise(res). Я также попробовал завернуть вызов с flow.execute без успеха и хотел бы избежать использования серии цепочечных звонков .then, поскольку он делает тест менее удобочитаемым.

Будет ли это должным образом ждать, чтобы решить мое обещание выше, прежде чем перейти к тестовому потоку?

Если нет, то, что является надлежащим способом для создания объекта обещания, который должен быть надлежащим образом проверен ароматом контрафактора expect?

Я бегу используя новый и блестящий выпуск Protractor 2.0.

ответ

1

Вы создаете отложенное, а затем немедленно выполняете отложенное и возвращаете обещание для него (это просто сложный способ возврата объекта myWrapper).

Обещания используются для представления значения, которое у вас еще нет. Я ничего не вижу в вашем примере, который не доступен сразу, поэтому его непонятно, зачем вам обещание.

Я думаю, что вы хотите что-то вроде этого:

function myFunc() { 
    var myElement = element(by.binding('plan.name')); 
    return new myElementWrapper(myElement); 
} 

Ваш myElementWrapper должен выглядеть как обещание, если вы хотите, чтобы передать его expect, хотя (если продлить существующий ElementFinder, что должно быть достаточно).

+0

Извините, скопируйте ошибку патча. Исправьте код выше. Нет двух обещаний. Проблема все еще сохраняется. –

+0

Я удалил эту часть своего ответа. Остальное по-прежнему применяется, я думаю. –

Смежные вопросы