2017-05-12 1 views
0

seeResponseMatchesJsonTypeメソッドを使用して、妥当性検査のAPIレスポンスにいくつかのカスタムJsonTypeを定義することができるのだろうかと思います。私が意味する、のは、私は構造の応答があると仮定してみましょう:Codeception新しいJsonTypesを追加します

[ 
    'id' => 'integer', 
    'name' => 'string', 
    'address' => [ 
     'street' => 'string', 
     'city' => 'string' 
    ] 
] 

明らかに、この構造は、複合型addressが埋め込まれていると、全体のアプリで、このようなタイプはので、私は単純に書きたいと思い、数回使用される可能性があります。

$I->seeResponseMatchesJsonType([ 
    'id' => 'integer', 
    'name' => 'string', 
    'address' => 'addressType' 
]); 

この埋め込み構造を常に書き換えません。私はCodeceptionでどのように達成できますか?

+0

代わりに変数を使用するのはどうですか? 異なるテストからアクセスする場合は、ヘルパークラスの静的プロパティにします。 – Naktibalda

+0

私は既にヘルパーで定数を使用していましたが、そのような機能が利用可能かどうか尋ねたいと思っていました。 :) – Moby04

答えて

1

はい、\ Codeception \ Util \ JsonTypeクラスのaddCustomFilterメソッドを使用してこれを行うことができます。

/** 
    * Adds custom filter to JsonType list. 
    * You should specify a name and parameters of a filter. 
    * 
    * Example: 
    * 
    * ```php 
    * <?php 
    * JsonType::addCustomFilter('email', function($value) { 
    *  return strpos('@', $value) !== false; 
    * }); 
    * // => use it as 'string:email' 

    * 
    * // add custom function to matcher with `len($val)` syntax 
    * // parameter matching patterns should be valid regex and start with `/` char 
    * JsonType::addCustomFilter('/len\((.*?)\)/', function($value, $len) { 
    * return strlen($value) == $len; 
    * }); 
    * // use it as 'string:len(5)' 
    * ?> 
    * ``` 
    * 
    * @param $name 
    * @param callable $callable 
    */ 
    public static function addCustomFilter($name, callable $callable) 
    { 
     static::$customFilters[$name] = $callable; 
    } 
関連する問題