契约:如何匹配总和/联合类型?
Pacts: How to match a sum / union type?
我有一个 api 端点,它应该 return 一个求和类型的数组。我如何在协议(javascript 版本,消费者网站)中为它编写合适的匹配器?
示例:假设我们有端点 /api/events
,其中 return 是一个字典列表,每个字典代表一个事件。假设我们有两种不同类型的事件(实际上可能有几种):
interface ContentAddedEvent {
type: "ContentAdded"
newContent: string
}
interface UserRegisteredEvent {
type: "Userregistered"
username: string
}
type Event = ContentAddedEvent | UserRegisteredEvent
/api/events
return 是 Event[]
类型的数组。我如何为它编写一个匹配器?我没有在 https://docs.pact.io/implementation_guides/javascript/readme#matching 找到一个很好的例子,我可以如何存档它...
您在这里需要哪种语言?它被标记为 pact-jvm 但它看起来是一个与 JS 相关的问题?
在大多数当前实现中,您需要为两种场景中的每一种编写测试(即,一个测试用于 ContentAddedEvent
,另一个测试用于 UserRegisteredEvent
)
请参阅 https://docs.pact.io/faq/#why-is-there-no-support-for-specifying-optional-attributes 了解可选类型的挑战,这与此处相关(TL;DR - 如果你说你可以支持两种类型,但只测试一种变体,你不能保证合同是受支持,因此 Pact 采取的立场是您必须明确检查联合中的所有变体)。
我们有一个新的匹配器,它检查每个 类型中是否存在 至少一种称为 arrayContaining
的类型。有关如何使用此匹配器的信息,请参阅 https://github.com/pact-foundation/pact-js/tree/feat/v3.0.0#array-contains-matcher。应该是JS和JVM互通的,但是分支目前在beta
.
我有一个 api 端点,它应该 return 一个求和类型的数组。我如何在协议(javascript 版本,消费者网站)中为它编写合适的匹配器?
示例:假设我们有端点 /api/events
,其中 return 是一个字典列表,每个字典代表一个事件。假设我们有两种不同类型的事件(实际上可能有几种):
interface ContentAddedEvent {
type: "ContentAdded"
newContent: string
}
interface UserRegisteredEvent {
type: "Userregistered"
username: string
}
type Event = ContentAddedEvent | UserRegisteredEvent
/api/events
return 是 Event[]
类型的数组。我如何为它编写一个匹配器?我没有在 https://docs.pact.io/implementation_guides/javascript/readme#matching 找到一个很好的例子,我可以如何存档它...
您在这里需要哪种语言?它被标记为 pact-jvm 但它看起来是一个与 JS 相关的问题?
在大多数当前实现中,您需要为两种场景中的每一种编写测试(即,一个测试用于 ContentAddedEvent
,另一个测试用于 UserRegisteredEvent
)
请参阅 https://docs.pact.io/faq/#why-is-there-no-support-for-specifying-optional-attributes 了解可选类型的挑战,这与此处相关(TL;DR - 如果你说你可以支持两种类型,但只测试一种变体,你不能保证合同是受支持,因此 Pact 采取的立场是您必须明确检查联合中的所有变体)。
我们有一个新的匹配器,它检查每个 类型中是否存在 至少一种称为 arrayContaining
的类型。有关如何使用此匹配器的信息,请参阅 https://github.com/pact-foundation/pact-js/tree/feat/v3.0.0#array-contains-matcher。应该是JS和JVM互通的,但是分支目前在beta
.