
まるで関数のように テスト部品を再利用できるmablのFlowですが、今回のアップデートで引数設定できるようになりました。
Parameterized flows
mablはのちに「既存のものも引数付きFlowに変換できるようにしていく」そうですが、現段階では、新規作成されたFlowから適用されます。
Flowは開始部分を削除しても中身は消えないので、消えなかったステップにチェックを入れて再作成すれば簡単に変換できます。

Flowの画面にパラメータ画面が追加されています。こちらに追加すれば引数とそのデフォルト値を設定可能になります。修正したいときは「MANAGE PARAMETERS」をクリックしてください。
引数は「flow.指定した変数名」となります。mablの変数は「.(ドット)」が使えないので予約語のようになるようです。
その他の注意点は以下です。引数には文字列や変数だけでなく{{digit:10}}
といった指定も可能です。
動作確認

上のようなステップだと以下のような動きになります。まずは「3. Generate a random string… 」で変数messageを定義して「this is message. outside of flow」と入れておきます。
「5. Echo: “{{@message}}”」では、通常の変数messageにアクセスできるので「this is message. outside of flow」とメッセージが表示されます
「7. Echo: “{{flow.message}}”」はFlowの外なので変数にアクセスできず、「{{@flow.message}}」とEchoされてしまいます。
先にも書いたとおり、「flow.」ではじまる変数はFlowの外では利用できませんでした。

次に上記のようにFlow引数を使ってみましょう。引数には何も設定していないのでデフォルトメッセージがFlow内で使われます。
通常の変数messageはFlow内で利用できるので「Echo: “{{@message}}”」では「this is message.outside of flow」と表示されます。
「Echo: “{{@flow.message}}”」では「This is default message」とデフォルトメッセージが表示されます。
変数messageとFlow引数 flow.messageはまったく別物です。

最後に上記のように引数指定したFlowを使ってみましょう。

Flowは上記のようなStepになり、先程登場したものを再利用しています。引数を指定したのでデフォルト値が指定した引数で上書きされます。
「Echo: {{@message}}」では「this is message.outside of flow」と表示され、「Echo: {{@flow.message}}」では「overwrite message」と表示されました。ちゃんと上書きされてますね。
まとめ
その他の注意点は以下です。
- 引数はテスト実行中に変更不可能です。
- この変数のスコープはFlowの中だけになるため、外で使いたい場合は通常の変数にコピーする必要があります。
- 引数名を変更する場合は注意が必要です。引数の変更は利用されているFlow全体に反映されますが、Flow内のStepでその引数を利用している場合は、その引数名は変更されません。
- Loopで引数は使えません。
ログイン処理が多いアプリの場合、これまで僕は以下のようにFlowを作っていました。
- テストの冒頭で「email」と「password」の変数を定義
- Flow内で変数emailとpasswordを使ってログイン
これでも似たような動きができますが、このParameterized flowsを使えば、このFlowがどのような引数を使うかが明確になりますね。