# アサーション演算子

Talend Cloud API Testerのアサーション演算子を使用します。

アサーションは演算子に依存します。Talend Cloud API Testerには、使用できる演算子のセットが用意されています。

情報メモ注: レスポンスボディをJSONとして解釈されるようにする場合は、アサーションでJSON bodyエレメントを使用する必要があります。Body contentエレメントを使用すると、ボディは文字列として解釈されます。

## 等式

Equals演算子とDoes not equal演算子は最も単純なもので、等式チェックだけを行います。JSONは通用するものの、JSON配列で使用される場合は、予期される配列と実際の配列のフォーマットが異なっていても、リクエストが無効になることはありません。

Does not equal演算子はEqualsの正反対です。

## 比較

比較演算子は次のとおりです。

* Greater than
* Greater than or equal
* Less than
* Less than or equal

比較は次のように行われます。

* 数字であれば、数字の比較を行います。
* 文字列であれば、文字列の長さを比較します。
* ブール値、JSON配列、JSONオブジェクトであれば、それらを文字列として比較します。
* Nullであれば、エラーが表示されます。

比較するオブジェクトは同じ形式であることが必要です。形式に関連する問題を回避するには、最初にアサーション(正規表現など)を使い、比較するオブジェクトの形式を検証します。

日付を比較:

* タイムスタンプ形式の日付は整数として、ISO形式の日付は文字列としてそれぞれ処理されます。
* ISO形式の日付はディクショナリー的に比較されます。この比較が正確に行われるのは、同じ形式とタイムゾーンを使用している場合のみです。Talend Cloud API Testerは、UTCタイムゾーンを使い、ISO形式で日付を生成します。
* 日付の形式が異なっていたり、日付を別の形式の値と比較している場合は、誤検知の結果となってしまうことがあります。たとえばある日付が別の日付よりも小さいかどうかチェックしているとすると、実際はより大きい場合であっても、形式が異なる日付のほうがディクショナリー式に小さくなることがあります。このような理由から、日付を比較する前にアサーションを使って日付の形式と値をチェックしておくことをお勧めします。

## 存在

Exists演算子は、エレメントがレスポンスに存在することを確認します。

演算子がDoes not equalはEqualsの正反対です。

## 長さ

長さ演算子は次のとおりです。

* Equals
* Greater than or equal
* Less than or equal

長さは次のように計算されます。

* 文字列であれば、文字列にある文字数が返されます。
* JSON配列やXML配列であれば、配列にあるエレメントの数を返します。
* JSONオブジェクトであれば、オブジェクトにあるキーの数を返します。
* Null、数字、ブール値であれば 、該当なし - エラーが表示されます。
* 複数値ヘッダーであれば、ヘッダーの値の数が返されます。

情報メモ注: ヘッダーが複数回存在する場合や、コンマで区切られた値のリストが含まれる場合は、複数の値を持たせることができます。

## コンテンツ

コンテンツ演算子は次のとおりです。

* Contains
* Does not contain

次のように動作します。

* 文字列であれば、特定の部分文字列がエレメントに含まれているかどうかチェックします。

  Darth Vaderにはarthが含まれます

* JSON配列であれば、特定の値がエレメントにすべて含まれているかとうかチェックします。想定される値は、JSON配列またはコンマ区切りの値のいずれかになります。

  [ "Darth Vader", "Luke Skywalker", "Leia Skywalker" ]には"Darth Vader", "Luke Skywalker"が含まれます

  [ "Darth Vader", "Luke Skywalker", "Leia Skywalker" ]には[ "Darth Vader" ]が含まれます

* JSONオブジェクトであれば、特定のキーがエレメントに含まれているかどうかチェックします。

  { "age": 41, "lightSaberColor": "red", "forcePower": "3000" }には"age","lightSaberColor"が含まれます

  { "age": 41, "lightSaberColor": "red", "forcePower": "3000" }には"age","lightSaberColor"が含まれます

* XMLノードの配列であれば、ノードの配列としてリスト化されている指定のノードがエレメントにすべて含まれているかどうかチェックします。

  [&lt;title lang="en"&gt;Harry Potter&lt;/title&gt;, &lt;title lang="en"&gt;XQuery Kick Start&lt;/title&gt;, &lt;title lang="en"&gt;Learning XML&lt;/title&gt;]には[&lt;title lang="en"&gt;Harry Potter&lt;/title&gt;, &lt;title lang="en"&gt;Learning XML&lt;/title&gt;]が含まれます

* Null、数値、ブール値の場合: 該当なし - エラーが表示されます

## 正規表現マッチング

Matches演算子を使用すると、エレメントが特定の正規表現に一致するかどうか確認できます。

この演算子により、有効なJavaScript正規表現に対してエレメントがマッチングされます。以下の2つの形式があります。

* フラグがない場合: ^DarthはDarth Vaderと一致します。
* フラグがある場合: /^darth/iはDarth Vaderと一致します。

より完全なドキュメンテーションは[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)でご覧いただけます。

正規表現を作成し、実際の例に照らしてテストを行う方法を学習する場合は[\[Regex101 Website\] (Regex101 Webサイト)](https://regex101.com/)をお勧めします。正規表現の左側のメニューでJavaScriptのフレーバーを選択していることを確認します。