¿Cuál es la diferencia entre expect(something).toBe(true)
, expect(something).toBeTruthy()
yexpect(something).toBeTrue()
?
Tenga en cuenta que toBeTrue()
es un comparador personalizado introducido jasmine-matchers
entre otros comparadores útiles y útiles como toHaveMethod()
o toBeArrayOfStrings()
.
La pregunta debe ser genérica, pero, como ejemplo del mundo real, estoy probando que se muestre un elemento protractor
. ¿Qué partido debo usar en este caso?
expect(elm.isDisplayed()).toBe(true);
expect(elm.isDisplayed()).toBeTruthy();
expect(elm.isDisplayed()).toBeTrue();
.toBe(true)
==.toBeTrue()
. toBeTruthy () puede ser verdadero no solo sobre verdadero , sino también sobre 123 , "dfgdfg", [1,2,3], etc ... básicamenteif(x==true)
son verdaderos, mientras queif(x===true)
son verdaderos verdaderos.toBeTruthy
si no está seguro del tipo, es el mismo que== true
mientras sospecho que.toBe(true)
es lo mismo que=== true
Mind you it is a little overboard to call a function to test for true. Palabra de consejo. Olvídate==
y!=
existe en Javascript y nunca más lo uses. La verdad no es necesaria y una trampa para principiantes. Uso===
y en su!==
lugar.eslint
informado si se usan==
o!=
se sugieren sugerir cambiarlo a===
y!==
.Respuestas:
Lo que hago cuando me pregunto algo como la pregunta que se hace aquí es ir a la fuente.
ser - estar()
expect().toBe()
Se define como:Realiza su prueba con lo
===
que significa que cuando se usa comoexpect(foo).toBe(true)
, solo pasará sifoo
realmente tiene el valortrue
. Los valores de verdad no harán pasar la prueba.toBeTruthy ()
expect().toBeTruthy()
Se define como:Tipo coerción
Un valor es verdadero si la coerción de este valor a un valor booleano produce el valor
true
. La operación!!
prueba la veracidad coaccionando el valor pasadoexpect
a un valor booleano. Tenga en cuenta que, al contrario de lo que implica la respuesta actualmente aceptada , no== true
es una prueba correcta de veracidad. Obtendrás cosas divertidas comoMientras que usando
!!
rendimientos:(Sí, vacío o no, una matriz es verdadera).
a decir verdad()
expect().toBeTrue()
es parte de Jasmine-Matchers (que se registra en npm comojasmine-expect
después de que un proyecto posterior se registrarajasmine-matchers
primero).expect().toBeTrue()
Se define como:La diferencia con
expect().toBeTrue()
yexpect().toBe(true)
es queexpect().toBeTrue()
prueba si se trata de unBoolean
objeto.expect(new Boolean(true)).toBe(true)
fallaría mientrasexpect(new Boolean(true)).toBeTrue()
que pasaría. Esto se debe a esta cosa divertida:Al menos es verdad:
¿Cuál es el más adecuado para usar
elem.isDisplayed()
?Finalmente, el transportador le pasa esta solicitud a Selenium. La documentación establece que el valor producido por
.isDisplayed()
es una promesa que se resuelve en aboolean
. Lo tomaría al pie de la letra y usaría.toBeTrue()
o.toBe(true)
. Si encontré un caso donde la implementación devuelve valores de verdad / falsedad, presentaría un informe de error.fuente
En javascript hay verdaderas y verdaderas. Cuando algo es cierto, obviamente es verdadero o falso. Cuando algo es verdadero, puede o no ser un booleano, pero el valor de "conversión" de es un booleano.
Ejemplos.
Esto puede simplificar las cosas si desea verificar si una cadena está configurada o si una matriz tiene algún valor.
Y como se dijo.
expect(something).toBe(true)
Yexpect(something).toBeTrue()
es lo mismo. Peroexpect(something).toBeTruthy()
no es lo mismo que ninguno de esos.fuente
[] == false;
no es correcto, la afirmación en sí misma es falsa porque los objetos siempre son verdaderos[] == false;
estrue
[""]==false
o[0]== false
; no vacío, no falsey, simplemente engañoso ...x == true
lo que tiene en sus ejemplos es una forma engañosa y, como muestran los comentarios anteriores, una forma incorrecta de ilustrar el concepto de veracidad en JavaScript. La verdadera prueba de veracidad en JavaScript es cómo se comporta un valor en unaif
declaración o como un operando en una expresión booleana. Sabemos que1
es verdadero porqueif (1)
hará que se evalúe la siguiente declaración. Del mismo modo[]
es verdad por la misma razón: aunque[] == true
evalúe comofalse
,if ([])
seguirá causando que se evalúe la siguiente declaración, por lo que sabemos que[]
es verdadero.Sé que a todos les encanta una lista fácil de leer:
toBe(<value>)
- El valor devuelto es el mismo que<value>
toBeTrue()
- Comprueba si el valor devuelto estrue
toBeTruthy()
- Compruebe si el valor, cuando se convierte en un valor booleano, será un valor verdaderoTruthy valores son todos los valores que no son
0
,''
(cadena vacía),false
,null
,NaN
,undefined
o[]
(matriz vacía) *.* Observe que cuando ejecuta
!![]
, regresatrue
, pero cuando ejecuta[] == false
también regresatrue
. Depende de cómo se implemente. En otras palabras:(!![]) === ([] == false)
En su ejemplo,
toBe(true)
ytoBeTrue()
dará los mismos resultados.fuente
alert(!![])
[] == true
en tu consola producefalse
.[] == false
en tu consola producetrue
Hay muchas buenas respuestas por ahí, solo quería agregar un escenario donde el uso de estas expectativas podría ser útil. Utilizando
element.all(xxx)
, si necesito verificar si todos los elementos se muestran en una sola ejecución, puedo realizar:La razón de ser
.all()
devuelve una matriz de valores y así todo tipo de expectativas (getText
,isPresent
, etc ...) se puede realizar contoBeTruthy()
cuando se.all()
entra en el cuadro. Espero que esto ayude.fuente
reduce()
matriz de booleanos en un solo valor y luego apliqué eltoBe(true)
cheque. Esto es mucho más simple, gracias.