2017-05-12 3 views
0

Je me demande s'il est possible de définir certains JsonType personnalisés pour les réponses de l'API de validation via la méthode seeResponseMatchesJsonType. Je veux dire, supposons que je réponse à une structure:Codeception ajouter nouveau JsonTypes

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

Il est évident que cette structure est de type complexe address intégré et dans l'application tout ce type peut être utilisé plusieurs fois donc je voudrais simplement écrire:

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

Sans réécrire cette structure intégrée tout le temps. Comment puis-je l'atteindre dans Codeception?

+0

Il est actuellement impossible d'utiliser une variable à la place. Faites-en une propriété statique de la classe d'assistance si vous souhaitez y accéder à partir de différents tests. – Naktibalda

+0

J'ai déjà utilisé des constantes dans les helpers mais je voulais savoir si une telle fonctionnalité est disponible. :) – Moby04

Répondre

1

Oui, vous pouvez le faire en utilisant la méthode addCustomFilter de la classe \ Codeception \ Util \ JsonType.

/** 
    * 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; 
    }