O que faço quando me pergunto algo como a pergunta feita aqui é ir à fonte.
ser estar()
expect().toBe()
é definido como:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
Ele realiza seu teste com o ===
que significa que, quando usado como expect(foo).toBe(true)
, passará apenas se foo
realmente tiver o valor true
. Valores reais não farão o teste passar.
toBeTruthy ()
expect().toBeTruthy()
é definido como:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
Coerção de tipo
Um valor é verdadeiro se a coerção desse valor para um booleano produz o valor true
. A operação !!
testa a veracidade coagindo o valor passado expect
para um booleano. Observe que, ao contrário do que a resposta atualmente aceita implica , não== true
é um teste correto para a veracidade. Você terá coisas engraçadas como
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
Considerando que usando !!
rendimentos:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(Sim, vazio ou não, uma matriz é verdadeira.)
ser verdadeiro()
expect().toBeTrue()
faz parte do Jasmine-Matchers (que é registrado no npm como jasmine-expect
após um projeto posterior registrado jasmine-matchers
primeiro).
expect().toBeTrue()
é definido como:
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
A diferença com expect().toBeTrue()
e expect().toBe(true)
é que expect().toBeTrue()
testa se está lidando com um Boolean
objeto. expect(new Boolean(true)).toBe(true)
falharia enquanto expect(new Boolean(true)).toBeTrue()
passaria. Isso é por causa dessa coisa engraçada:
> new Boolean(true) === true
false
> new Boolean(true) === false
false
Pelo menos é verdade:
> !!new Boolean(true)
true
Qual é o mais adequado para uso elem.isDisplayed()
?
Em última análise, o transferidor entrega esse pedido ao Selenium. A documentação afirma que o valor produzido por .isDisplayed()
é uma promessa que resolve para a boolean
. Eu aceitaria pelo valor de face e usaria .toBeTrue()
ou .toBe(true)
. Se eu encontrasse um caso em que a implementação retornasse valores verdadeiros / falsos, eu arquivaria um relatório de erro.
.toBe(true)
==.toBeTrue()
. toBeTruthy () pode ser verdadeiro não apenas sobre true , mas sobre 123 , "dfgdfg", [1,2,3], etc ... basicamente são verdadeirosif(x==true)
, enquantoif(x===true)
são verdadeiros verdadeiros.