Що я роблю, коли мені цікаво щось подібне до цього питання, - це перейти до джерела.
бути()
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)як істинні.