问题标签 [pact-jvm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
testing - PactDslJsonBody 未能创建 JSON 对象
@Pact(provider="Appointment_Provider",consumer = "Appointment_Consumer") public PactFragment createFragmentAppointmentDetails(PactDslWithProvider 构建器)抛出 ParseException{
}
pact - PactRunner 忽略 @DefaultRequestValues
我正在尝试测试我的第一个 Pact 文件,但我一直在为向生产者发出的请求设置标头。
当向具有无效用户 ID 的用户 API 发出请求时,我正在尝试获取 404,如以下 Pact 文件中所定义:
失败的测试如下:
永远不会调用 defaultRequestValues 方法,永远不会设置授权标头,并且服务返回 401(在这种情况下这是正确的行为,但这不是我要测试的)。
有什么想法可以在此测试中设置授权标头吗?谢谢。
unit-testing - 如何为多部分/表单数据上传 cdc 测试创建 PACT
我正在尝试创建用于上传文件验证的 cdc 测试。我使用 DIUS 库。我没有找到任何如何在 DIUS 中使用 .withFileUpload() 的示例。接下来是我的协议代码:
协议创建和验证代码:
但是当我运行测试时,我得到: json={"error": Missing start boundary}
什么s wrong in my code? I suppose something wrong with Content type, with 'boundary' part. But I don
知道如何指定任意边界。也许有人知道另一个实现多部分/表单数据上传请求的库。
谢谢。
pact - Pact:如何匹配键与正则表达式匹配的对象?
我正在尝试编写一个契约消费者测试来匹配以下响应。
每个调度对象由与简单正则表达式匹配的未知数量的键组成。但是我看不到使用正则表达式匹配键的方法,同时将值映射到简单的布尔值。
例如,我在 API 中看到了以下方法。
但这将期望一个新对象作为值,而不是原始类型。
有没有办法指定一个不精确的键映射到 pact-jvm 中的原始值?
gradle - Pact 提供者不向 Pact Broker 发送验证
我是 Pact(消费者驱动的测试)和 gradle 的新手,我使用这个著名的研讨会尝试使用 Java 和 Pact Brocker https://github.com/Mikuu/Pact-JVM-Example的 Pact ,但在最后一部分没有工作时provider 将验证发送给 Pact Broker。它通过 REST API 手动工作,但使用该项目从不发送验证。请帮助了解会发生什么(可能缺少某些东西,某些库或注释?)
当生产者尝试将验证发送到 Pact Broker(docker 中的本地 Broker 使用 gradle with ./gradlew :example-provider:pactVerify
)时,我会附上调试日志。我猜 POST 请求的主体丢失了。
java - 如何在 pact jvm 中迭代地创建 Pact 文件
所以我有一个包含一些请求和响应数据的 json 文件,我想要完成的是遍历这些数据并创建一个使用每个请求和响应的 pact 文件。
所以目前我在junit中使用参数化测试来迭代我们的json数据,这基本上是可行的,除了因为所有协议的生产者名称都相同,它会创建相同的文件并覆盖以前的文件。
不确定是否有更好的方法来实现这一点,我查看了 Pact Jvm 的 Github 并查看了堆栈溢出,但无法找到创建 pact 文件的人,而没有静态指定所有数据。
pact - Pacts:需要非空地图(或非空字段)的匹配规则
我需要帮助来使用 pact-jvm ( https://github.com/DiUS/pact-jvm ) 编写我的消费者契约。
我的问题是我有一个字段是地图列表(数组)。每个地图可以有不同类型的元素(字符串或子地图),例如。
但我们只对其中一些答案感兴趣。
注意:以上只是显示validatedAnswers
. 每张answers
地图都有几十个元素。
我们真正需要的是:https ://github.com/pact-foundation/pact-specification/issues/38 ,但它计划用于 v.4。与此同时,我们正在尝试不同的方法。我现在尝试做的是指定列表的每个元素都是非空映射。另一种方法是指定列表的每个元素都不为空。这些都可以使用 Groovy DSL 完成吗?
这个:
不起作用,因为它意味着answers
预期为空(“预期为空地图但收到地图([...])”,另请参见https://github.com/DiUS/pact-jvm/issues/298) .
所以我想做的是这样的:
或者:
或者:
可以做到吗?
java - 如果 junit 5 测试失败,Pact 不会将提供者验证结果发送给 Pact 代理
我用spring创建了一个REST服务。现在我想使用 pact 和 junit 5 来测试消费者-提供者-通信。我已经有一个正在运行的 pact-broker(来自https://github.com/jaimeniswonger/pact-broker-openshift)。消费者测试工作正常并发布协议。provider-test 加载这些并尝试验证它们。但测试只有在验证成功的情况下才会上传结果。我尝试使用surefire和failsafe运行测试。
测试代码:
协议代理属性在 pom 中定义:
是否可以配置测试以通知协议代理验证失败?
pact - 如何在 pact-jvm 中用异构数组表示响应
我无法弄清楚如何在协定合同的数组中表示具有结构不同对象的数组。
来自协议规范-v3
还需要定义匹配器是否应与逻辑 AND(所有匹配器必须匹配)或 OR(至少一个匹配器必须匹配)组合。AND 应该是默认值,但在某些情况下 OR 是有意义的
这可以用来“或”两种不同类型的对象吗?
这是我试图通过 pact-jvm DSL 建模的响应,该suggestions
数组包含两个不同类型的对象,“1”和“3”,具有不同的模式 -
我到目前为止的代码:
junit5 - 协议提供者测试中断:pactVerificationTestTemplate » PreconditionViolation
我对 CDC 测试还很陌生,只是迈出了第一步。我已经部署了 Pact-Broker (docker-compose),在 localhost:80 运行。消费者成功将生成的契约发送给代理,但提供者似乎无法获得有效的契约(但这只是假设)。
我正在使用 spring-boot、maven、jUnit5。应用程序测试在 Ubuntu 上运行。 在本地目录中使用 PactFolder 和消费者生成的契约合同会导致成功的测试。
当我切换到 @PactBroker 注释时,提供者能够连接到代理并收到以下响应(我从调试日志中得到它):
并且测试运行结果如下:
由于使用本地 pact 文件会使测试变绿,我想原因不在我的测试类的代码中,但如果它可能有帮助,我在这里提供它:
由于不能选择使用本地 pact 文件,我真的很想知道如何修复错误,并将感谢任何有用的评论。
maven 协议依赖项:
用于发布消费者协议的 Maven 插件:
契约提供者 docker-compose.yml: