问题标签 [pact]

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.

0 投票
1 回答
449 浏览

node.js - Pact-js:POST 正文被 VerifyProvider 乱码


我在使用 Pact-js 和 POST 正文时遇到了一个奇怪的问题。

背景:
消费者端
- 我有一个我正在尝试测试的 NodeJs 应用程序
- 我配置了 Pact 并设置了适当的框架
- 所有测试都成功运行并生成合同

提供者端:
- 同样,我有一个 NodeJs 应用程序,我'我正在尝试测试
- Pact 已经设置并且框架到位
- 当我运行测试时,所有 GET 请求都成功运行,但是所有 POST 都报告失败。

问题:
- 当我回显从 Pact(veryifyProvider)传递给服务的 POST 主体时,我可以看到它将主体(JSON)包装在另一个“键:值”配对中,我想要解析的主体是键和值为空。它还在正文中的所有双引号中添加了转义字符 (\)。例如:
{"{\"账户\":\"123\",\"Orbit\":\"5.00\",\"日期\":\"2016-06-22\",\"客户\" :\"1234\",\"弹簧\":\"1234\"}":""}

当我查看我的 Pact 合同 json 时,一切看起来都是正确的。在 VerifyProvider 读取 JSON 并将其传递到 REST 端点之间的某个地方,主体被损坏了。这只是在测试期间发生的接缝,正常调用可以正常工作。

这是我使用 Provider 端执行验证的代码:

我无法提取我的确切消费者代码库,但它在此处显示的结构几乎相同Pact-js

很感谢任何形式的帮助!

0 投票
1 回答
296 浏览

java - How combine a @TargetRequestFilter with @RunWith(Parameterized.class)

Is it possible annotate a method with @TargetRequestFilter in a test-class annotated with @RunWith(Parameterized.class)?

0 投票
0 回答
1968 浏览

java - 通过 IntelliJ 运行 pact jvm 提供程序测试

我非常尝试使用 IntelliJ IDEA 作为我的 IDE的pact-jvm-provider-junit 。

我正在测试提供的 ContractTest 示例:

但是当我尝试运行测试(Run -> Run ContractTest)时,就好像测试根本没有运行:

2017 年 3 月 15 日下午 3:24:00 org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry loadTestEngines 信息:发现的测试引擎 ID:[junit-jupiter,junit-vintage] 2017 年 3 月 15 日下午 3:24:01 junit.vintage.engine.execution.TestRun lookupTestDescriptor 警告:运行器 au.com.dius.pact.provider.junit.PactRunner 类 rs.ContractTest 报告了未知事件描述:rs.ContractTest。它将被忽略。

进程以退出代码 0 结束

在此处输入图像描述

我不确定这是否与我在 IntelliJ 中运行测试的方式有关,或者我在 pact-jvm-provider“跑步者”中遗漏了一些东西。

感谢有关此主题的任何帮助。

谢谢!

0 投票
1 回答
348 浏览

node.js - 为 pact-js-mocha 编写以错误响应的交互

我一直在研究 pact-js-mocha 示例,当预期的响应是错误时,我在验证交互时遇到了一些困难。这是我想验证的交互:

但是我不确定 expectError() 函数。在示例中,这将返回一个超级代理请求,但是当交互中的状态设置为 400 时,该方法似乎会引发错误。

我已经尝试了一些事情,但大部分都是跟踪并且都是错误的(比如使用 supertest 创建一个请求并期待它的结果)。

谢谢你的帮助

0 投票
1 回答
510 浏览

pact - Pact 验证提供者,Pact::UnexpectedIndex 是什么意思?

我正在使用Pact进行消费者驱动的合同测试。在我的用例中,我的消费者“some-market-service-consumer”正在使用提供者“market-service”。在 some-market-service-consumer “生产”的合同如下所示:

}

在提供者网站上,我使用的是pact-provider-verifier-docker ¹。这是我的测试结果:

似乎测试工作正常 - “电话”测试有效。但在这一点上,我不知道(预期的)“Pact::UnexpectedIndex”是什么意思,以及它为什么失败。这种期望从何而来,如何解决?

¹ 特别是我自己的版本,它使用最新的外部依赖项。

0 投票
3 回答
1716 浏览

pact - 我应该测试合同中的所有枚举值吗?

我对是否应该考虑某种类型的测试功能或合同有疑问。

假设我有一个类似 /getToolType 的 API,它接受 {object" "myObject"} 作为输入,并以 {type: "[az]+"} 形式返回类型

客户端和服务器之间达成一致,返回的类型将匹配一组字符串,比如 [hammer|knife|screwdriver],因此消费者决定在枚举中解析它们,当返回的类型未知时使用备用值。

消费者是否应该为每种类型(锤子、刀子、螺丝刀)包括一个测试用例,以确保生产者仍然遵守始终返回的协议,例如,当使用锤子对象调用 /getToolType 时,小写字符串“锤子” ? 或者你会认为这样的测试用例是有用的吗?为什么?

0 投票
1 回答
1949 浏览

pact - 契约消费者测试中各个参数的模式匹配

使用 pact-jvm - Java

所以我们有我们的 api,它以十进制/浮点值响应几个参数。"body": { "status": "api is up.", "totalTime": 0.005939006805419922 }" 我尝试使用正则表达式匹配,但协议正文生成数据,这与实际 api 返回的小数不匹配。

协议生成:

}

协议与实际响应的差异:

差异:

那么是否可以使用“eachlike”而不是 decimalType 来匹配这些值的模式?当我查看 eachLike 时,它​​接受一个字符串和一个 int - https://github.com/DiUS/pact-jvm/blob/master/pact-jvm-consumer/src/main/java/au/com/dius /pact/consumer/dsl/PactDslJsonBody.java#L580

0 投票
1 回答
750 浏览

netty - 如何通过 System 属性让 Netty 监听所有接口?

我正在使用https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-consumer-junit,它使用MockServer,它使用Netty

启动的 Netty 只监听环回(netstat -tulpn 输出:)

,但我想让它听“外面的世界”。我希望启动的 Netty 接受我的 LAN-IP 地址上的连接(例如,192.168.xy:21221 作为本地地址),甚至是到 Netty 端口的每个传入连接(0.0.0.0:21221 作为本地地址)。由于我的框架链以某种方式使 Netty 配置,好吧,很远,我想在启动我的应用程序时使用系统属性来做到这一点。就像是

这有可能吗?

0 投票
2 回答
824 浏览

pact - Pact 是否支持 REST 和 JMS?

我想开始使用框架 Pact for JVM 进行合同测试。但是 Pact JVM 是否支持 REST 和 JMS?

我还没有找到任何有关此的信息。

0 投票
1 回答
966 浏览

gradle - 提供者 pactVerify 没有获取 JSON Pact 文件

我在同一个仓库中有两个项目,具有完全独立的目录结构(消费者在/test-consumer,提供者在/app)。

/test-consumer/build/pacts正如预期的那样,消费者检查在 中输出一个 JSON Pact 文件

然后我将文件复制到/app/build/pacts/中,并将同一systemProperties行放入我的提供商的build.gradle.

我抄袭的示例项目正在使用 Pact 经纪人,所以我想我可以把它拿出来,并用 . 替换它rootDir,但它不起作用。这就是我得到的:

WARNING: There are no consumers to verify for provider 'Coffee Ordering Provider'

因此,它似乎正在查找 Pact 文件,但在其中任何一个中都找不到提供者+消费者对。

TL;DR:我做错了什么?

以下是一些可以提供帮助的代码位: