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


関連記事

Go言語

Go 1.23 でslicesとmapsに追加された関数

1 はじめに2 slicesパッケージに追加された関数2.1 All2.2 Backward2.3 Values2.4 AppendSeq2.5 Collect2.6 SortedFunc2.7 Ch ...

FastAPIのPath Operationをasync defにするときはブロッキングに気をつけよう!

1 はじめに2 Path Operationと並行処理3 挙動の確認4 対応方法4.1 asyncioを使って自力で非同期化する4.2 async対応済みのパッケージを使う4.3 async defを ...

aws

Amazon API Gatewayざっくり概要

1 はじめに2 Amazon API Gatewayとは?2.1 なにができる?2.2 作成できるAPIの種類2.3 REST APIとHTTP APIの違い3 Amazon API Gatewayの ...

laravel logo

Laravel Cashier サブスクリプションに使用するテーブルを理解する

1 はじめに2 Laravel Cashierのテーブル2.1 usersテーブル2.2 subscriptionsテーブル2.3 supscription_itemsテーブル3 課金情報の更新方法4 ...

Stripe Connectで支払方法をクローンする

1 はじめに2 プラットフォームの顧客側の実装2.1 プラットフォームの顧客登録2.2 支払方法の登録3 支払方法クローンの実装3.1 顧客と支払方法のクローン3.1.1 支払方法のクローン3.1.2 ...

フォロー

blog-page_side_responsive

2020年10月
 123
45678910
11121314151617
18192021222324
25262728293031

アプリ情報

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