合同测试涉及会话或工作流程的API

时间:2017-12-01 07:20:01

标签: pact pact-jvm

您好我正在尝试为产品购买工作流程编写合同测试。所以很明显我不能直接调用Checkout API而不调用Add to Cart API。 但正如我观察到验证命中单独的路径可能与Pact JSON文件中列出的顺序不同。

那么我应该如何处理涉及会话管理和工作流程的scnenario(意思是step1 shud成功只有step2才会成功)

谢谢!

1 个答案:

答案 0 :(得分:1)

使用provider states在购物车中设置正确的数据,以便在您致电checkout时获得所需的行为。以下是pact.io关于提供者状态的文档。

  

协议中的每次互动都应该孤立地进行验证,不会保留先前互动的上下文。依赖于先前测试结果的测试是脆弱的,并让你回到集成测试地狱,这是你试图通过使用契约逃脱的令人讨厌的地方。

     

那么如何测试需要数据已经存在于提供程序中的请求?提供者状态允许您通过在运行交互之前将数据直接注入数据源来设置提供者的数据,以便它可以做出与消费者期望的响应相匹配的响应。提供者状态的名称在使用者中的交互的给定子句中指定,然后用于查找要在提供者中运行的代码块以设置正确的数据。如果您需要存根下游系统,或者返回在正常方案中难以导致的错误响应(例如500),则可以在此处设置存根。

https://docs.pact.io/documentation/provider_states.html

在您的情况下,这看起来像:

给定an item has been added to the cart 收到a request to checkout后,它会以the checkout response...回复。

顺便说一句,我也想象一下,在no items have been added to the cart收到a request to checkout时,我会想到它会回复some other type of response (empty cart? error?)

提供者需要在验证码中为an item has been added to the cart实现提供者状态挂钩,通过将项目直接插入到数据源中,将项目添加到购物车。