Що я роблю, коли мені цікаво щось подібне до цього питання, - це перейти до джерела.
бути()
expect().toBe()
визначається як:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
Він виконує свій тест, ===
що означає, що при використанні як такий expect(foo).toBe(true)
він пройде лише в тому випадку, якщо він foo
фактично має значення true
. Значення Truthy не дозволять пройти тест.
toBeTruthy ()
expect().toBeTruthy()
визначається як:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
Введіть примус
Значення є правдоподібним, якщо примус цього значення до булевого значення дає значення true
. Операція !!
перевіряє правдивість шляхом примушування значення, переданого булевому значенню expect
. Зверніть увагу , що Попри те , що прийнято в даний час відповідь на увазі , == true
це НЕ коректний тест для truthiness. У вас вийдуть кумедні речі на кшталт
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
Беручи до уваги !!
врожайність:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(Так, порожній чи ні, масив є правдоподібним.)
toBeTrue ()
expect().toBeTrue()
є частиною Жасмін-Матчерс (яка реєструється в npm, як jasmine-expect
після jasmine-matchers
першого проекту, зареєстрованого спочатку).
expect().toBeTrue()
визначається як:
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
Різниця в expect().toBeTrue()
і expect().toBe(true)
полягає в тому, що expect().toBeTrue()
тестує, чи має справу з Boolean
об'єктом. expect(new Boolean(true)).toBe(true)
провалиться, тоді як expect(new Boolean(true)).toBeTrue()
пройде. Це через цю смішну річ:
> new Boolean(true) === true
false
> new Boolean(true) === false
false
Принаймні, це правда:
> !!new Boolean(true)
true
Що найкраще підходить для використання elem.isDisplayed()
?
У кінцевому рахунку Protractor передає цей запит селену. У документації зазначено, що отримана величина .isDisplayed()
- це обіцянка, яка відповідає рівню a boolean
. Я б взяв це за номінал і використовував .toBeTrue()
або .toBe(true)
. Якщо я знайшов випадок, коли реалізація повертає значення truthy / falesy, я б подала звіт про помилку.
.toBe(true)
==.toBeTrue()
. toBeTruthy () може бути істинним не тільки на true , але і на 123 , "dfgdfg", [1,2,3] і т. д. ... в основномуif(x==true)
є truthy, в той часif(x===true)
як істинні.