BackEnd

Laravelのブラウザテスト「Dusk」で非同期で重たい処理のテストを実装してみよう

投稿日:2020年10月26日 更新日:

はじめに

前回の続きで、今回はLaravel Duskを使用して、非同期なテストを実装したいと思います。以前調査した際に、重い処理がある場合には、待機する必要があることが分かったので、Laravel Duskで非同期で重い処理を待機する方法を紹介します。

JavaScriptの式で待機する

Ajax通信を行った後の画面を検証したり、操作したりしたい場合は、JavaScriptの式を実行し、結果がtrueになるまで待機することができます。

テスト対象となるコード

index.blade.php

Ajax通信では次のJSONがレスポンスされます。

Duskのテストコード

今回は、ページが読み込まれて、書籍の一覧表示をテストします。

waitUntil() メソッドで、JavaScriptの式を渡し、その結果がtrueになると、後続が実行されます。
waitUntil('books.length > 0', 10) というように、第二引数を設定すると、10秒でタイムアウトするようになります。

では、この式がどのような仕組みで評価されているか理解するために、 waitUntil() メソッドのコードを読んでいきたいと思います。

まず、コードの整形が行われ、式に return がない場合は、先頭に着けます。セミコロンも同様に付けます。
その後、 waitUsing() メソッドを使って、100msごとに、WebDriverにJavaScriptを実行させます。
waitUsing() メソッドは、クロージャの中で true が返却されるか、タイムアウトすると終了します。
ちなみに、タイムアウトまでの秒数が指定されていない場合は、 waitUsing() メソッドのデフォルト値である5秒でタイムアウトします。

DOM要素の表示を待つ

DOMの表示を待ち、その結果を検証することもできます。

テスト対象となるコード

先ほどのbladeファイルを変更します。

本を借りたり、返却したりすることができるようになりました。この借りる・返却するボタンのテストを実装したいと思います。

Duskテストコードの実装

まず、借りる/返却するボタンが表示されるのを待つため、一覧表示のテストと同じように待機します。
ボタン動作の検証ですが、今回は、ボタンの文言が借りた後は「返却する」、返却した後は「借りる」に変わっていることを検証するため、 waitForText を使用して待機させています。
waitForText('返却する', 10) とすると、10秒でタイムアウトになります。
この他にも、 waitFor('.return') のように、CSSセレクタを使用して待機させることも可能です。

waitForTextのコードも見てみましょう。

先ほどと同じように waitUsing() メソッドを使って、100msおきに Str::conatins() 関数により評価され、テキストが存在してtrueが返却されるか、タイムアウトでfalseが返却されます。

さいごに

いかがでしたか。Laravel Duskで、シンプルな非同期処理の待機を実装することができます。ぜひ試してみてください。

おすすめ書籍

PHPフレームワークLaravel入門 第2版 PHPフレームワーク Laravel実践開発 PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 よくわかるPHPの教科書 【PHP7対応版】

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

laravel logo

Laravelでテストコードを書くには? Featureテスト/Unitテスト

1 はじめに2 FeatureとUnitの使い分け3 テスト用データベースの準備4 Featureテスト4.1 テスト対象のコード4.2 テストコードの実装4.3 テスト結果の検証4.3.1 ステータ ...

rails

RailsでAjax処理で画面を更新する

1 はじめに2 View(遷移元)の設定3 Controllerの実装4 View(遷移先)の実装5 参考6 さいごに はじめに RailsでAjax処理で画面を更新する方法を簡単に紹介します。 Vi ...

Go言語

Go言語でGinkgoを利用してBDDしてみた

1 はじめに2 BDDとは3 Ginkgoについて3.1 Ginkgoの概要3.1.1 Describe3.1.2 Context3.1.3 It3.1.4 JustBeforeEach3.1.5 B ...

laravel logo

コードでわかるLaravelのブラウザ認証

1 はじめに1.1 認証機能の概要2 Controller3 SessionGuard3.1 fireAttemptEvent3.2 retrieveByCredentials3.3 hasValid ...

rails

Railsでの非同期処理とDelayed Job

1 はじめに2 Active Job2.1 Active Jobの役割2.2 ジョブを作成する2.3 ジョブをキューに登録する2.4 コールバック2.5 例外3 Delayed Job3.1 設定3. ...

フォロー

blog-page_side_responsive

2020年10月
 123
45678910
11121314151617
18192021222324
25262728293031

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。