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 foo
ré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 , == true
n'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-expect
après un projet ultérieur enregistré en jasmine-matchers
premier).
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 Boolean
objet. 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.