2016-10-06 3 views
0

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

/** 
* Elements are Displayed 
*/ 
elementsDisplayed() { 

    let elements = [ 
     this.emailTextField, 
     this.pwordTextField, 
     this.signInBtn, 
     this.forgotLink, 
    ]; 

    let elementsDisplayed = elements.map(function(element) { 
     return element.isDisplayed(); 
    }); 

    let bundledPromise = protractor.promise.all(elementsDisplayed) 
    return bundledPromise 
} 

Когда я вызываю эту функцию, он возвращает массив из четырех истинных значений. Прямо сейчас я вызываю эту функцию и ожидаю ее .toEqual([true, true, true, true])

Есть ли способ проверить, что каждый элемент в массиве равен .toBe(true)? Я пробовал следующее, и он терпит неудачу. Функция, которую я должен проверить, это:

describe('Login Tests',() => { 

it('Validate Login Page Elements',() => { 
    let elementsVisible = loginPage.elementsDisplayed(); 
    _.forEach(elementsVisible, function(value) { 
     expect(value).toBe(true); 
    }) 
    }); 
}); 

Выход проверяет путь более чем на 4 пункта; это целая куча expected null to be true, expected undefined to be true, expected 'pending' to be true и т. д.

Что я здесь делаю неправильно?

ответ

0

Так вот как мы установили, мы изменили метод elementsDisplayed, чтобы выглядеть следующим образом:

/** 
* Elements are Displayed 
*/ 
elementsDisplayed() { 

    let elements = [ 
     this.emailTextField, 
     this.pwordTextField, 
     this.signInBtn, 
     this.forgotLink, 
    ]; 

    let elementsDisplayed = elements.map(function(element) { 
     return element.isDisplayed(); 
    }); 

    return protractor.promise.all(elementsDisplayed).then(result => { 
     console.log(result); 
     return _.every(result) 
    }); 
} 
0

Этот

let elementsVisible = loginPage.elementsDisplayed(); 

назначает обещание вернулся из elementsDisplayes() в elementsVisible

и это

_.forEach(elementsVisible ... 

перечисляет свойства этого обещания.

Чтобы получить в значении обещание, вы должны использовать then

loginPage.elementsDisplayed().then(elementsVisible => { 
    _.forEach(elementsVisible, function(value) { 
     expect(value).toBe(true); 
    }) 
}) 

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

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