[解決済み】toBe(true) vs toBeTruthy() vs toBeTrue()
質問
とはどのような違いがあるのでしょうか?
expect(something).toBe(true)
,
expect(something).toBeTruthy()
と
expect(something).toBeTrue()
?
ただし
toBeTrue()
は
カスタムマッチャー
で紹介した
jasmine-matchers
のような便利なマッチャーもありますが
toHaveMethod()
または
toBeArrayOfStrings()
.
質問は一般的なものを想定していますが、実際の例として、ある要素を表示するためのテストを
protractor
. この場合、どのマッチャーを使うべきでしょうか?
expect(elm.isDisplayed()).toBe(true);
expect(elm.isDisplayed()).toBeTruthy();
expect(elm.isDisplayed()).toBeTrue();
解決方法は?
ここで質問されたようなことを疑問に思ったとき、私がすることは、ソースを見に行くことです。
toBe()
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
(そう、空であろうとなかろうと、配列は真実なのだ)。
toBeTrue()
expect().toBeTrue()
の一部です。
ジャスミンマッチャー
(としてnpmに登録されている)。
jasmine-expect
を登録した後、後のプロジェクトで
jasmine-matchers
の方が先)。
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()
?
最終的に、Protractor はこのリクエストを Selenium に引き渡します。このリクエストは
ドキュメント
が生成する値は
.isDisplayed()
を解決するプロミスです。
boolean
. 私なら額面通りに受け取って
.toBeTrue()
または
.toBe(true)
. もし、この実装が真偽不明の値を返すようなケースを見つけたら、バグレポートを提出しようと思っています。
関連
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】 \u003C とは何ですか?
-
[解決済み] (a== 1 && a ==2 && a==3) が真に評価されることはあるのでしょうか?
-
[解決済み] JasmineのJavaScriptテスト - toBeとtoEqualの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。