2015-06-18 3 views
1

Я просто пытаюсь сохранить атрибут входного значения переменной.getAttribute return unresolved

Это код:

var sliderNumber = element.all(by.model('color.red')).get(1); 
var firstNum = sliderNumber.getAttribute('value').then(function(value) { 
    return value; 
}); 
    //Some code that changes the sliderNumber attribute  
expect(sliderNumber.getAttribute('value')).toEqual(firstNum + 1); 

Это дает мне ошибку вроде этого:

Прогнозный '184' равным Promise :: 433 ([[PromiseStatus]]: "отложенный") 1.

Я также попытался:

var firstNum = function() { 
    return sliderNumber.getAttribute('value').then(function(value) { 
     return value; 
    }); 
} 

Это не поможет. Как я могу решить это обещание?

ответ

2

С .getAttribute() возвращает обещание, которое будет вызывать ваш обратный вызов асинхронно, вам нужно поставить тестовую логику внутри обратного вызова:

var sliderNumber = element.all(by.model('color.red')).get(1); 

// get the initial value 
sliderNumber.getAttribute('value').then(function(value) { 
    // once we've got the initial value, store it, then proceed with your test 
    var initialValue = parseInt(value, 10); 

    //Some code that changes the sliderNumber attribute 

    expect(sliderNumber.getAttribute('value')).toEqual((initialValue + 1).toString()); 
}); 

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

+0

О, интересно. Таким образом, любой тест, связанный с этим начальным значением, который я получаю, должен войти в функцию '.then'? –

+1

Я также хотел бы добавить одну вещь к вашему коду. В вашем ожидающем выражении '.getAttribute' возвращает только строку или null, поэтому она должна быть' .toEqual ((parseInt (initialValue) + 1) .toString()) ' –

+0

Правильно, вы можете либо поставить свои тесты непосредственно в' .then() 'или разбить их на отдельные функции, которые вы можете вызвать в' .then() '. И спасибо за редактирование, я забыл, чтобы вещи были правильного типа! Я сделал еще одну небольшую настройку, чтобы было легче читать ('parseInt' дальше) и немного более твердый ([всегда передавать параметр radix в' parseInt'] (https://developer.mozilla.org/en-US/документы/Web/JavaScript/Справка/Global_Objects/ParseInt)). – Agop