ここで尋ねられた質問のようなものが疑問に思ったときに私がすることは、ソースに行くことです。
することが()
expect().toBe()
と定義されている:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
テストを実行します。===
つまり、として使用したexpect(foo).toBe(true)
場合、foo
実際に値がある場合にのみ合格しますtrue
。真実の値はテストに合格しません。
toBeTruthy()
expect().toBeTruthy()
と定義されている:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
型強制
この値のブール値への強制が値を生成する場合、値は真実ですtrue
。オペレーションは、ブール!!
値に渡された値を強制することにより、真実性をテストしexpect
ます。現在受け入れられている答えが意味するものとは対照的に、== true
は真実性の正しいテストではないことに注意してください。あなたは次のような面白いものを取得します
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
一方、!!
利回りを使用する場合:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(はい、空かどうか、配列は真実です。)
真であります()
expect().toBeTrue()
Jasmine-Matchersの一部です(これはjasmine-expect
、jasmine-matchers
最初に登録された後のプロジェクトの後でnpmに登録されます)。
expect().toBeTrue()
と定義されている:
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
違いexpect().toBeTrue()
とはexpect().toBe(true)
つまりexpect().toBeTrue()
、それが扱っているかどうかをテストBoolean
オブジェクト。expect(new Boolean(true)).toBe(true)
失敗するでしょうが、expect(new Boolean(true)).toBeTrue()
合格します。これは、このおかしなことが原因です。
> new Boolean(true) === true
false
> new Boolean(true) === false
false
少なくともそれは真実です:
> !!new Boolean(true)
true
での使用に最適なのはどれelem.isDisplayed()
ですか。
最終的に分度器はこの要求をセレンに引き渡します。ドキュメントによって生成される値があること状態.isDisplayed()
に解決されることを約束ですboolean
。それを額面通りにして、.toBeTrue()
またはを使用します.toBe(true)
。実装が真/偽の値を返すケースを見つけた場合、バグレポートを提出します。
.toBe(true)
== と思い.toBeTrue()
ます。toBeTruthyは()時のみならず、真であることができる真が、時123、等「dfgdfg」、[1,2,3]、...基本的にif(x==true)
しながら、truthyあるif(x===true)
真真です。