Этот код:
const mySelector = Selector('any css selector');
await t
.expect(mySelector).notOk()
всегда выдаст ошибку, потому что истинность mySelector
всегда верна.Таким образом, приведенный выше код похож на этот код: assert(true).toBe(false)
.
Выше mySelector
- объект обещания, и истинность обещания всегда истинна.
Теперь, если вы напишите:
const mySelector = await Selector('any css selector');
await t
.expect(mySelector).notOk();
mySelector
- это NodeSnaphsot
объект, который является неким литеральным объектом с множеством свойств, таких как:
{
textContent,
attributes,
id,
clientHeight,
...
}
Истинность литерального объекта всегда вернаи, следовательно, вышеприведенный expect
все равно выдаст ошибку.
На самом деле, эта проблема могла бы быть полностью замаскирована, если вместо этого использовался тестовый код:
const mySelector = await Selector('any css selector');
await t
.expect(mySelector).ok();
Приведенный выше тестовый кодбудет всегда проходить, даже если mySelector
не представляет какой-либо существующий элемент в DOM.
Внутри ожидаемого значения вы должны утверждать только для свойства или для метода Selector, который возвращает логическое значение при использовании ok () или notOk ().
Возможные логические свойства:
mySelector.hasChildElements
mySelector.hasChildNodes
mySelector.checked
mySelector.focused
mySelector.selected
mySelector.visible
mySelector.exists
Возможные методы:
mySelector.hasClass('className')
mySelector.hasAttribute('attributeName')
.withAttribute ('attributeName') простометод фильтра, который возвращает объект Selector (яи обещание), и истинность этого результата всегда верна.
Поэтому, когда вы пишете:
const mySelector = Selector('any css selector').withAttribute('attributeName');
, это более или менее похоже на написание этого псевдокода:
const mySelector = Selector('any css selector') // returns a collection of Selectors
.toArray() // convert it to an array
.filter((selector) => selector.hasAttribute('attributeName'))
.toPromise() // convert back to a promise object