Ce que je fais quand je me demande quelque chose comme la question posée ici, c'est d'aller à la source.
être()
expect().toBe() est défini comme:
function toBe() {
  return {
    compare: function(actual, expected) {
      return {
        pass: actual === expected
      };
    }
  };
}
Il effectue son test avec ===ce qui signifie que lorsqu'il est utilisé comme expect(foo).toBe(true), il ne passera que s'il a fooréellement la valeur true. Des valeurs véridiques ne feront pas passer le test.
toBeTruthy ()
expect().toBeTruthy() est défini comme:
function toBeTruthy() {
  return {
    compare: function(actual) {
      return {
        pass: !!actual
      };
    }
  };
}
Coercition de type
Une valeur est vraie si la contrainte de cette valeur sur un booléen donne la valeur true. L'opération !!teste la véracité en contraignant la valeur transmise expectà un booléen. Notez que contrairement à ce que la réponse actuellement acceptée implique , == truen'est pas un test correct pour la véracité. Vous aurez des choses amusantes comme
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
Alors qu'en utilisant les !!rendements:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![] 
true
(Oui, vide ou non, un tableau est la vérité.)
pour être vrai()
expect().toBeTrue()fait partie de Jasmine-Matchers (qui est enregistré sur npm comme jasmine-expectaprès un projet ultérieur enregistré en jasmine-matcherspremier).
expect().toBeTrue() est défini comme:
function toBeTrue(actual) {
  return actual === true ||
    is(actual, 'Boolean') &&
    actual.valueOf();
}
La différence avec expect().toBeTrue()et expect().toBe(true)est que expect().toBeTrue()teste s'il s'agit d'un Booleanobjet. expect(new Boolean(true)).toBe(true)échouerait alors expect(new Boolean(true)).toBeTrue()que passerait. C'est à cause de cette drôle de chose:
> new Boolean(true) === true
false
> new Boolean(true) === false
false
Au moins c'est la vérité:
> !!new Boolean(true)
true
Quel est le mieux adapté pour une utilisation avec elem.isDisplayed() ?
En fin de compte, Protractor transmet cette demande à Selenium. La documentation indique que la valeur produite par .isDisplayed()est une promesse qui se résout en a boolean. Je le prendrais au pied de la lettre et utiliserais .toBeTrue()ou .toBe(true). Si je trouve un cas où l'implémentation renvoie des valeurs véridiques / fausses, je déposerais un rapport de bogue.
               
              
.toBe(true)==.toBeTrue(). toBeTruthy () peut être vrai non seulement sur vrai , mais sur 123 , "dfgdfg", [1, 2, 3], etc ...if(x==true)sont fondamentalement véridiques, alors queif(x===true)sont vrais vrais.