javascript - 契约:如何匹配总和/联合类型?
问题描述
我有一个 api 端点,它将返回一个 sum 类型的数组。如何在协定(javascript 版本、消费者网站)中为其编写合适的匹配器?
示例:假设我们有一个端点/api/events
,它返回一个字典列表,每个字典代表一个事件。假设我们有两种不同类型的事件(实际上可能有几种):
interface ContentAddedEvent {
type: "ContentAdded"
newContent: string
}
interface UserRegisteredEvent {
type: "Userregistered"
username: string
}
type Event = ContentAddedEvent | UserRegisteredEvent
/api/events
返回类型为 的数组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
.
推荐阅读
- python - Django加载错误的模板
- stack - 堆栈的一些问题
- javascript - 如何在不使用导致它的函数的基本情况的情况下修复“超出最大调用堆栈”
- javascript - 反应 forEach 没有被渲染
- templates - CakePHP:创建可以从 .ctp 模板文件调用的函数的最佳方法是什么?
- python - 如何计算列中一行中的相等值
- javascript - 如何检查在 Material ui 文本字段中输入的值是否为
- c# - How to show multiple ListView in a single content page with items of different data types in Xamarin Forms?
- excel - Excel macro that updates data coming from a database (IBM TM1) to run with VBScript causes problems
- json - See if any of status in Json is failed or not