注意事项

Pact遵循伯斯塔尔法则

对发送严格——消费者项目中的模拟服务器在将实际请求与期望请求进行对比时,实际请求体中不允许包含在期望请求体中未定义的字段。我们不期望出现真实消费者“遗漏”发送数据的情形。

对接收宽容——当提供者项目中对契约进行验证时,响应体和响应头中可以包含期望中未定义的字段,假定任何多余字段都会被消费者所忽略。这允许提供者可以在不破坏已存在的消费者功能的前提下进行演进(不像过去使用WSDL的那些糟糕日子)。

但是Pact对于请求头并未遵循伯斯塔尔法则

对于请求头则有所不同——因为我们发现有些框架常常会在请求中加入自己的头信息,要维护这些会变得极其繁重,所以要注意如果你在使用会改变提供者行为的请求头,你应当自己在期望中明确定义。

响应中的空哈希意味着“允许任意的哈希”

根据伯斯塔尔法则,当提供者项目中对契约进行验证时,响应体和响应头中可以包含期望中未定义的字段。这意味着如果你指定一个空哈希,实际上意思是说,“期望一个可以含有任何内容的哈希”。

不能期望某个字段不出现在某一响应中

根据伯斯塔尔法则,提供者可能返回多余字段,消费者只需忽略就好。提供者可能和另外一个消费者之间的契约会需要那些字段,所以你的消费者不能去告诉提供者不应该去做哪些事情。消费者只应定义提供者应该去做什么事情。

消费者端语言 != 提供者端语言

如果在消费者端使用与提供者端不同的语言编写测试时,必须确保两者之间使用的是共同的Pact规范,否则就无法校验契约。

例如,如果你在JS消费者端使用Pact DSL的v2版本规范和一个.NET的提供者端进行匹配时,就会无法工作,因为.NET提供者端只支持到v1.1版本规范。这种情况下,你就只能在消费者端使用v1.1版本以保持兼容。