2017-01-17 3 views
1

J'utilise Spring Cloud Contract pour créer des stubs pour un service REST afin que je puisse tester avec un client REST. J'ai le coureur stub travaillant dans une application de démarrage de printemps, et tout fonctionne comme prévu. Le problème que j'ai est que je voudrais voir des éléments des demandes dans les réponses, pour mieux simuler le comportement éventuel du service REST. Par exemple, dans ce contrat, je voudrais ce qui est passé dans le champ « code » dans la demande de comparution régurgité dans la réponse:Utilisation de Spring Cloud Contract Groovy DSL, comment puis-je paramétrer la réponse pour inclure des valeurs de la requête?

package contracts 

org.springframework.cloud.contract.spec.Contract.make { 
    request { 
     method('POST') 
     url $("/resource") 
     body ([ 
       code : $(client(regex('[a-zA-Z0-9]{5,32}'))) 
     ]) 
    } 

    response { 
     status 200 
     body([ 
       code: ??? 
     ]) 
    } 
} 

Il est évident que l'entrée « code » peut être quelque chose qui correspond à la régulière expression, et donc la valeur réelle est inconnue jusqu'à l'exécution. Y a-t-il quelque chose que je puisse mettre à la place de "???" renvoyer le code soumis dans la demande? J'essayé d'accéder à, par exemple:

request.body.serverValue['code'] 

mais cette valeur, il semble est généré au moment de la compilation, peut-être pour permettre la génération automatique de tests dans ContractVerifierTest.java sous générés essais sources.

Est-ce que cela peut être fait? Est-ce une utilisation appropriée de Spring Cloud Contract?

+0

J'ai mis à jour la réponse cause réellement à partir de 1.1.0 vous pouvez le faire. –

+0

oh, excellent @ MarcinGrzejszczak, merci pour la mise à jour! – billshwah47

Répondre

1

Actuellement, ce n'est pas pris en charge. Nous préférons une approche où vous avez des contrats plus simples. Si vous avez besoin dans une réponse d'une valeur de la demande, tapez simplement la demande et les parties de réponse du contrat.

Vous pouvez, cependant, signaler un problème et nous pouvons essayer de penser à quelque chose dans les futures versions.

MISE À JOUR:

Avec la version 1.1.0 qui est déjà possible. Consultez les docs pour plus d'informations - http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.1.0.RELEASE/#_referencing_request_from_response

+0

Comment pouvons-nous passer un paramètre de demande dans un contrat DSL, en utilisant le contrat Spring Cloud pour l'architecture de microservices. – blackOcean

+0

Vous voulez dire une partie de référence de la demande dans la réponse? Si c'est la question, vérifiez ma réponse mise à jour où je pointe vers la documentation. –