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 foorealmente 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 expectpara 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-expectapós um projeto posterior registrado jasmine-matchersprimeiro).
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 Booleanobjeto. 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.