Quello che faccio quando mi chiedo qualcosa come la domanda posta qui è andare alla fonte.
essere()
expect().toBe()
è definito come:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
Esegue il suo test con il ===
quale significa che se usato come expect(foo).toBe(true)
, passerà solo se foo
effettivamente ha il valore true
. I valori veritieri non supereranno il test.
toBeTruthy ()
expect().toBeTruthy()
è definito come:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
Digita coercizione
Un valore è vero se la coercizione di questo valore a un valore booleano fornisce il valore true
. L'operazione !!
verifica la veridicità forzando il valore passato expect
a un valore booleano. Si noti che contrariamente a quanto implica la risposta attualmente accettata , non== true
è un test corretto per la verità. Avrai cose divertenti come
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
Considerando che usando i !!
rendimenti:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(Sì, vuoto o no, un array è veritiero.)
per essere vero()
expect().toBeTrue()
fa parte di Jasmine-Matchers (che è registrato su npm come jasmine-expect
dopo un progetto successivo registrato per jasmine-matchers
primo).
expect().toBeTrue()
è definito come:
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
La differenza con expect().toBeTrue()
e expect().toBe(true)
è che expect().toBeTrue()
verifica se si tratta di un Boolean
oggetto. expect(new Boolean(true)).toBe(true)
fallirebbe mentre expect(new Boolean(true)).toBeTrue()
passerebbe. Ciò è dovuto a questa cosa divertente:
> new Boolean(true) === true
false
> new Boolean(true) === false
false
Almeno è vero:
> !!new Boolean(true)
true
Quale è più adatto per l'uso con elem.isDisplayed()
?
Alla fine il goniometro consegna questa richiesta al selenio. La documentazione afferma che il valore prodotto da .isDisplayed()
è una promessa che si risolve in a boolean
. Lo prenderei per valore nominale e uso .toBeTrue()
o .toBe(true)
. Se trovassi un caso in cui l'implementazione restituisce valori di verità / falsità, presenterei una segnalazione di bug.
.toBe(true)
==.toBeTrue()
. toBeTruthy () può essere vero non solo su vero , ma su 123 , "dfgdfg", [1,2,3], ecc ... fondamentalmenteif(x==true)
sono veri, mentreif(x===true)
sono veri veri.