フローテストを作成する
学習の目的
この単元を完了すると、次のことができるようになります。
- レコードトリガーフローで自動テストを作成する。
- フローテストでアサーションを作成する。
- フローテストを実行する。
フローを実際に使ってみる準備
このモジュールに沿って手順を実践する場合は、パッケージを新しい Trailhead Playground にインストールする必要があります。以下の手順に従って Playground を起動し、パッケージをインストールしてください。また、ハンズオン Challenge を実行するときにもこのパッケージと Playground を使用します。
Trailhead Playground を起動するために、このページの一番下までスクロールして [Launch (起動)] をクリックします。
組織に [パッケージのインストール] というタブが表示されている場合は、 次の手順を実行します。
-
[パッケージのインストール] タブをクリックします。
![[Package ID (パッケージ ID)] 項目と [Install (インストール)] ボタンが表示された Trailhead Playground の [Install a Package (パッケージをインストール)] タブ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/22c389008ba93a02918ae0fd1c7800de_i.11.jpg)
- [Package ID (パッケージ ID)] 項目に
04tKa000002OV31IAGを貼り付けます。
-
[Install (インストール)] をクリックします。
-
[Install for Admins Only (管理者のみのインストール)] を選択し、[Install (インストール)] をクリックします。
アプリケーションのインストールが終了すると、確認ページが表示され、Playground に関連付けられているアドレスにメールが届きます。
では、このバッジの演習と Challenge 用のレコードを作成するために、フローを実行しましょう。
- [Setup (設定)] の [Quick Find (クイック検索)] ボックスに
flows(フロー) と入力し、[Flows (フロー)] を選択します。
-
[Run This Flow Once At the Start (開始時にこのフローを 1 回実行)] を選択します。Flow Builder が新しいウィンドウで開きます。
-
[実行] をクリックします。フローが新しいウィンドウで実行されます。
- フローに「The flow interview is now waiting… (フローインタビューは現在待機中です…)」と表示されたら、フローのウィンドウを閉じます。
順調ですね。では、テストの準備を始めましょう。
フローテストを作成する
テストを作成する際は、フローで作成した内容を参照しないでください。その代わりに、作成したフロー計画、具体的にはフローがいつ実行され、フローが何を行うかを参照します。以前の単元で計画した内容は次のとおりです。
|
確認事項
|
回答のポイント
|
|---|---|
|
フローはいつ実行されますか?
|
ケースが作成または更新されたときに実行します。 |
|
フローは何を行いますか?
|
すべてのユーザーに対して、フローは次の処理を行う必要があります。
|
この情報を使用して、先ほどインストールしたパッケージに含まれている [Check Escalated in Cases (ケースのエスカレーションを確認)] フローのテストを作成しましょう。始める前に、このシナリオについて知っておくべき点を確認します。
- このフローには、最初の機能の要素がすでに作成されています。決定要素と [Update Records (レコードを更新)] 要素です。この演習を開始する前に、これらの要素を変更しないでください。
- このシナリオでは、状況を正確に把握しているシステム管理者が、データローダーを使用して、現在 [Status (状況)] が [Escalated (エスカレーション済み)] であるすべての既存ケースの [Escalated (エスカレーション済み)] を True に設定したことを前提としています。このようにデータを最新の状態に保つと、自動化が簡素化され、良好なデータ管理につながります。
テストを追加して初期トリガーレコードを定義する
まず、最初の機能のテストを作成します。
[Status (状況)] が [Escalated (エスカレーション済み)] で、[Escalated (エスカレーション済み)] 項目がチェックされていない場合、フローは [Escalated (エスカレーション済み)] 項目を True に設定します。
このアクションは、ケースが作成された場合と更新された場合の両方で発生する必要がありますが、各テストで評価できるのは、作成または更新のいずれか一方のみです。レコードの作成をシミュレーションするテストを作成しましょう。
- [Check Escalated in Cases (ケースのエスカレーションを確認)] フローを開きます。
-
[View Tests (テストを表示)] をクリックします。
-
[作成] をクリックします。
- [Label (表示ラベル)] には、「
Created: Status is Escalated, Escalated is False(作成済み: 状況がエスカレーション済み、エスカレーション済みが False)」と入力します。
- [Run the Test When a Record Is (レコードが次の場合にテストを実行)] では、[Created (作成済み)] が選択されていることを確認します。
-
[Set Initial Triggering Record (初期トリガーレコードを設定)] タブを選択します。
![手順 6 と 7 に対応する [New Test (新規テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/387c68947b1c19ad651cfffbbde070fb_i.12.jpg)
これは、テストがアサーションをチェックするために使用するレコードであり、組織には保存されないことを忘れないでください。
- [Status (状況)] で [Escalated (エスカレーション済み)] を選択します。
この機能では、[Status (状況)] 項目と [Escalated (エスカレーション済み)] 項目のみがテストに関連します。[Escalated (エスカレーション済み)] 項目はデフォルトで False に設定されているため、[Status (状況)] 項目のみを設定すれば十分です。
アサーションを定義する
次に、テストのアサーションを定義します。これは、初期トリガーレコードでフローが実行された後に True である必要がある条件です。
-
[Set Assertions (アサーションを設定)] タブを選択します。
- アサーション 1 を定義して、フローが [Status Escalated - IsEscalated False (状況がエスカレーション済み - IsEscalated が False)] パスを通過したことを確認します。
- [Resource (リソース)] で [Criteria (条件)] を選択し、次に [Status Escalated - IsEscalated False (状況がエスカレーション済み - IsEscalated が False)] を選択します。
- [Operator (演算子)] が [Equals (次の文字列と一致する)] であることを確認します。
- [Value (値)] で [True] を選択します。
アサーションでは、特定の決定結果パスをフローが通過したかどうかを、その決定結果が True に等しいかどうかを確認することでチェックします。
-
[Add Custom Failure Message (カスタムエラーメッセージを追加)] をクリックします。
- [Custom Failure Message (カスタムエラーメッセージ)] には、「
Flow did not take the Status Escalated - IsEscalated False path.(フローは Status Escalated - IsEscalated False パスを通過しませんでした。)」と入力します。
アサーションが失敗すると、デバッグの詳細にアサーションのカスタムエラーメッセージが表示されます。カスタムエラーメッセージを使用すると、後で失敗したテストのトラブルシューティングが容易になります。
-
[+ Add Assertion (アサーションを追加)] をクリックします。
- アサーション 2 を定義して、[IsEscalated (エスカレーション済み)] 項目が True に設定されたことを確認します。
- Resources (リソース): [Triggering Case (トリガーケース)] > [Escalated (エスカレーション済み)]
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): True
- Custom Failure Message (カスタムエラーメッセージ):
Escalated was not set to true.([Escalated (エスカレーション済み)] が [True] に設定されませんでした。)![前の手順に対応する [New Test (新規テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/5a6ca27b05d592aa3cec5093d930086f_i.14.png)
-
[保存] をクリックします。
更新用のテストを追加して初期トリガーレコードを定義する
次に、同じ機能に対するテストを作成しますが、今回はレコード更新をシミュレーションします。
-
[View Tests (テストを表示)] をクリックします。
-
[作成] をクリックします。
- [Label (表示ラベル)] に、「
Updated: Status is Escalated, Escalated is False(更新時: [Status (状況)] が [Escalated (エスカレーション済み)]、[Escalated (エスカレーション済み)] が [False])」と入力します。
- [Run the Test When a Record Is (レコードが次の場合にテストを実行)] で、[Updated (更新されたとき)] を選択します。
-
[Set Initial Triggering Record (初期トリガーレコードを設定)] タブを選択します。
- [Status (状況)] で [Working (処理中)] を選択します。
更新後のトリガーレコードとアサーションを定義する
[Set Updated Triggering Record (更新後のトリガーレコードを設定)] タブには、フローが実行される前にフローをトリガーした変更が含まれていることを忘れないでください。これらの変更は、組織のデータベースには保存されません。
-
[Set Updated Triggering Record (更新後のトリガーレコードを設定)] タブを選択します。
![手順 1 と 2 に対応する [New Test (新規テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/d07e42a1899f3d2011f589caa92948aa_i.15.jpg)
- [Status (状況)] で [Escalated (エスカレーション済み)] を選択します。
-
[Set Assertions (アサーションを設定)] タブを選択します。
- アサーション 1 を定義して、トリガーレコードが [Status Escalated - IsEscalated False (状況がエスカレーション済み - IsEscalated が False)] 決定結果のパスを通過したことを確認します。
- Resources (リソース): [Criteria (条件)] > [Status Escalated - IsEscalated False (状況がエスカレーション済み - IsEscalated が False)]
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): True
- Custom Failure Message (カスタムエラーメッセージ):
Flow did not take the Status Escalated - IsEscalated False path.(フローは Status Escalated - IsEscalated False パスを通過しませんでした。)
-
[+ Add Assertion (アサーションを追加)] をクリックします。
- アサーション 2 を定義して、[Escalated (エスカレーション済み)] が True に設定されたことを確認します。
- Resources (リソース): [Triggering Case (トリガーケース)] > [Escalated (エスカレーション済み)]
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): True
- Custom Failure Message (カスタムエラーメッセージ):
Escalated was not set to true.([Escalated (エスカレーション済み)] が [True] に設定されませんでした。)
-
[保存] をクリックします。
フローのテストを実行する
テストを作成しましたので、次はテスト主導型開発の次のステップに進みます。合格すると思っていなくても、作成したテストを実行します。
-
[View Tests (テストを表示)] をクリックします。
- [Test Label (テスト表示ラベル)] 列の上部にある [Select All (すべて選択)] チェックボックスをクリックして、両方のテストを選択します。
![手順 2 に対応する [Tests (テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/007ebcd0e2413f35962b0a20c384e309_i.16.jpg)
-
[実行] をクリックします。
![両方のテストが失敗していることを示す [Tests (テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/6a4af3cbc48f5c372a98088c07094dac_i.17.jpg)
Flow Builder が両方のテストを実行し、[Result (結果)] 列に結果を表示します。どちらのテストも失敗しています。失敗した理由を確認するため、これらのテストの 1 つを見てみましょう。
- [Updated: Status is Escalated, Escalated is False (更新時: 状況がエスカレーション済み、エスカレーション済みが False)] テストの行で、
をクリックし、[Run Test and View Details (テストを実行して詳細を表示)] を選択します。
![[Test Run Details (テスト実行の詳細)] ウィンドウ。フローキャンバスには、テスト実行が [Status Escalated - IsEscalated False (状況がエスカレーション済み - IsEscalated が False)] パスを通過したことが表示されます。詳細には、アサーション 1 が合格し、アサーション 2 が失敗したことが、次の説明に対応する詳細とともに表示されます。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/40b82cf2e779ec0419a7327d1faf5326_i.19.png)
Flow Builder はテスト実行とその詳細を表示し、テスト実行が通過したパス (1) を強調表示し、失敗したアサーションを示します。[Test Run Details (テスト実行の詳細)] では、失敗した各アサーションに、探していた条件 (2)、そのアサーションに定義したカスタムエラーメッセージ (3)、およびそれらの条件がチェックされた値 (括弧内) (4) が表示されます。
このテストで失敗したアサーションは、トリガーケースの [Escalated (エスカレーション済み)] 項目が True に設定されていることを確認します。[Set Escalated to True (Escalated を True に設定)] 要素を詳しく見て、[Escalated (エスカレーション済み)] 項目を True に設定しているか確認しましょう。
![[Set Escalated to True (Escalated を True に設定)] 要素。ここでは [IsEscalated (エスカレーション済み)] 項目が False に設定されていることが強調表示されています。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/b87d544beb733dc41d39120327c18870_i.20.png)
★ どうやら、このフローを作成した人は混乱しており、この要素を True ではなく False に設定するよう構成してしまったようです。テストがなければ、本番環境にリリースされる前にこのエラーに気付かなかったかもしれません。フローテストのメリットをすでに実感しています。まさに不可欠なツールです。
テストに合格するようにフローを更新する
テスト主導型開発では、このような事態が起きることを想定しています。次のステップに進みましょう。テストに合格するように機能を更新します。
-
[Edit Flow (フローを編集)] をクリックします。
- [Set Escalated to True (Escalated を True に設定)] 要素を編集します。
-
[Value (値)] を True に変更します。
- フローを保存します。
- フローのすべてのテストを再び実行します。
今回は、すべてのテストに合格するはずです。
![前述の手順に対応する [Tests (テスト)] ウィンドウ。両方のテストに合格しました。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/d59bcdbe4de30e5b81403254cf99c6e2_i.21.jpg)
フローを整理する
テスト主導型開発の最後のステップは、今作成した内容を整理することです。幸い、フローはすでに非常にシンプルで、要素にも説明が設定されています。先ほど修正した [Update Records (レコードを更新)] 要素の説明をよく見てみると、何と書かれていますか?
![「Set the triggering case's Escalated field to false. (トリガーケースの Escalated 項目を False に設定します。)」という説明が表示されている [Set Escalated to True (Escalated を True に設定)] 要素の設定パネル。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/7ac76e22734b683b62ae03604e07a831_i.22.png)
これは明らかに誤りです。この要素は、Escalated 項目を True に設定するよう変更したばかりです。次のステップに進む前に、この説明を更新してください。
新しい機能を追加する
テスト主導型開発サイクルの最後のステップを完了しましたので、新しい機能で最初からやり直します。フロー計画には、ケースがクローズされ、[Escalated (エスカレーション済み)] がチェックされている場合に、ケースの取引先の所有者に通知メールを送信するという、もう 1 つの機能があります。この機能を作成しましょう。
決定結果を追加する
- [Criteria (条件)] 要素で、[Outcome Order (結果の順序)] の横にある
をクリックして、新しい結果を作成します。
- [Label (表示ラベル)] には、「
Closed - IsEscalated True(クローズ済み - IsEscalated が True)」と入力します。
- [Closed - IsEscalated True (クローズ済み - IsEscalated が True)] 結果の 1 つ目の条件の要件を定義します。
- [Resource (リソース)] で [Triggering Case (トリガーケース)] > [Status (状況)] を選択します。
- [Operator (演算子)] は [Equals (次の文字列と一致する)] のままにします。
- [Value (値)] で [Closed (クローズ済み)] を選択します。
-
[+ Add Condition (条件を追加)] をクリックします。
- [Closed - IsEscalated True (クローズ済み - IsEscalated が True)] 結果の 2 つ目の条件の要件を定義します。
- [Resource (リソース)] で [Triggering Case (トリガーケース)] > [Escalated (エスカレーション済み)] を選択します。
- [Operator (演算子)] は [Equals (次の文字列と一致する)] のままにします。
- [Value (値)] で [True] を選択します。
- [When to Execute Outcome (結果を実行するタイミング)] で、[Only if the record that triggered the flow to run is updated to meet the condition requirements (フローの実行をトリガーしたレコードが条件の要件を満たすように更新された場合のみ)] を選択します。
メール機能を作成する
- [Closed - IsEscalated True (クローズ済み - IsEscalated が True)] パスで、
をクリックします。
-
[Action (アクション)] を選択します。
- [Action (アクション)] に
email(メール) と入力し、[Send Email (メールを送信)] を選択します。
- [Label (表示ラベル)] に
Email Account Owner(取引先所有者にメール) と入力します。
- [Recipient Addresses (宛先アドレス)] で [Triggering Case (トリガーケース)] > [Account ID (取引先 ID)] > [Owner ID (所有者 ID)] > [Email (メール)] を選択します。
- [Subject (件名)] には、「
Your Customer's Escalated Ticket Has Been Closed(お客様のエスカレーション済みチケットはクローズされました)」と入力します。
- [Body (本文)] 項目の横にある
をクリックし、[Search Resources (リソースを検索)] を選択します。
- [Body (本文)] で、[emailBody (メール本文)] (テキストテンプレート内) を選択します。
- フローを保存します。
メール機能のテストを追加する
次に、フローのこの最後の機能に対して、もう 1 つテストを追加します。 この会社では、ケースをクローズ済みの状態で作成することは許可されていないため、レコードが更新された場合のテストのみを作成します。さらに簡単にするため、既存のケースから初期トリガーレコードを定義します。
-
[View Tests (テストを表示)] をクリックします。
-
[作成] をクリックします。
- テストの詳細、トリガー、パスを設定します。
- Label (表示ラベル):
Case is Closed and Escalated(ケースがクローズされていてエスカレーション済み) - Run the Test When a Record Is (レコードが次の場合にテストを実行): Updated (更新済み)
- 初期トリガーレコードを設定します。
-
[Set Initial Triggering Record (初期トリガーレコードを設定)] タブを選択します。
- [Case for Test Data Only (テストデータ専用ケース)] 項目に「
motor breaks(モーターが故障する)」と入力し、[Motor breaks down when turning on (起動時にモーターが故障する)] を選択します。
- [Escalated (エスカレーション済み)] チェックボックスがオンになっていることを確認します。オンになっていない場合は、[Escalated (エスカレーション済み)] 表示ラベルをクリックしてチェックボックスをオンにします。
![手順 4c に対応する [Set Initial Triggering Record (初期トリガーレコードを設定)] タブ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/4704258420443ba5814d2db4a9e42e1c_i.26.jpg)
ここでは値を使用するためのレコードを選択しているだけですので、実際のレコードがこのテストによって更新されることはありません。また、このレコードが将来削除された場合でも、テストは引き続き動作します。
- 更新後のトリガーレコードを設定します。
-
[Set Updated Triggering Record (更新後のトリガーレコードを設定)] タブを選択します。
- Status (状況): Closed (クローズ済み)
アサーションを定義する
-
[Set Assertions (アサーションを設定)] タブを選択します。
- アサーション 1 を定義して、フローが [Closed - IsEscalated True (クローズ済み - IsEscalated が True)] パスを通過したことを確認します。
- Resources (リソース): [Criteria (条件)] > [Closed - IsEscalated True (クローズ済み - IsEscalated が True)]
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): True
- Custom Failure Message (カスタムエラーメッセージ):
Flow did not take the Closed - IsEscalated True path.(フローは Closed - IsEscalated True パスを通過しませんでした。)
-
[+ Add Assertion (アサーションを追加)] をクリックします。
- アサーション 2 を定義して、フローがメールアクションを実行したことを確認します。
- Resources (リソース): [Email Account Owner (取引先所有者にメール)] (アクション)
![手順 4a に対応する [New Test (新規テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/707153a01c5f8c62e8b14de5cae3a30f_i.27.png)
- Operator (演算子): Was Visited (アクセス済み)
- Value (値): True
- Custom Failure Message (カスタムエラーメッセージ):
Flow did not run the email action.(フローはメールアクションを実行しませんでした。)
-
[保存] をクリックします。
すべてのテストをもう一度実行します。
![3 つすべてのテストが合格していることを示す [Tests (テスト)] ウィンドウ。](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/modules/flow-implementation-1/create-flow-tests/images/ja-JP/f647e35c86d1411561767bb8cf1b3cd7_i.28.jpg)
これで、 3 つすべてのテストが合格しました。
これでテスト主導型開発を実践しました。機能を 1 つずつ作成し、テストでその機能の結果を定義し、テストが合格することを確認し、フローを整理しました。今は、決定要素の説明を更新し、新しいアクション要素に説明を追加します。
リソース
