问题标签 [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 投票
2 回答
840 浏览

pact - 在一个没有管道的容器中使用协议对 CI 进行合同测试?

我正在尝试向我的团队介绍合同测试,而 Pact 似乎是唯一可靠的工具。

复杂之处在于文档建议将其与微服务一起使用并作为 CI 管道的一部分。但是我们不能对我们的基础设施做出如此大的改变,相反,我尝试修改 Pact 的使用以适应我们的需求。

我想使用 Pact 通过 REST API 测试 JavaScript (Karma + Mocha) 前端和 Rails (Rspec) 后端之间的通信。一切都很好,除了我不能让它在 CI (Circle CI) 上可靠地工作。我们没有 CI 管道,正如 Pact 文档中所建议的那样,我们只想在一个容器中一个接一个地运行 Consumer 和 Provider 测试。并且工件将仅存储在容器中的临时文件夹中,然后将其删除。

问题:是否有任何既定且可靠的方法可以在没有管道的情况下在一个容器中在 CI 上运行 Pact 测试?或者 Pact 将不是这项工作的最佳工具?

我编写了一个 ruby​​ 脚本来完成此操作,但它经常因超时而崩溃:

还有一个 Rake 任务:

0 投票
0 回答
284 浏览

pact - 如何使用 Pact 合同验证模拟 Rails 上的用户身份验证?

在 Pact 验证阶段,我需要模拟用户身份验证。最好的方法是什么?我正在使用带有设计的 Rails 4。

我找到了一个看起来很 hacky 的解决方案,它有效但看起来很丑,我希望有另一种方法可以做到这一点。我正在更换appPact 套件的内部,并根据需要手动设置用户warden。用户 ID 在提供者状态中设置。它看起来像这样:

我真的希望有一些完全不同的视角可以以更漂亮的方式完成这项任务。

0 投票
1 回答
238 浏览

junit - PACT DSL .closeObject 用于格式化分层、PACT 文件交互、响应

我无法使用 PACT DSL.closeObject()来格式化 PACT 交互响应。我正在征求建议以使这项工作正常进行,或者询问是否.closeObject()没有按预期工作?我有一个包含 2 件商品的购物车。当我尝试使用 2 项格式化预期响应时.closeObject(),它不会编译,请参见下面的代码。编译错误在第一行.closeObject()之后".stringMatcher("name","iPhone")。我需要shoppingCartItems在 PACT 文件中创建预期响应的层次结构。PACT DSL 的广告用法.closeObject()可以从此链接中找到,在“匹配地图部分中的任何键” 使用 .closeObject() 的 PACT DSL 示例中

预期的 JSON 响应负载,应类似于带有分层数据的预期 PACT 响应负载

0 投票
1 回答
1720 浏览

maven - 契约:java-maven

我的疑问需要几个答案:

  1. Pact-mock-service 与 pact-jvm-server,两者是否相同?请描述一下。
  2. 在 java-maven 中实现 PACT

我可以运行这个:

https://github.com/anha1/microservices-pact-maven

https://github.com/warmuuh/pactbroker-maven-plugin

使用 pact-mock-service 和 pact-jvm-server 帮助我理解这一点

0 投票
1 回答
342 浏览

java - 开始使用 Pact 合同测试的先决条件

我们的组织团队结构是这样的,有一个新的独立测试团队负责 API 测试。所以作为这个团队的一员,我没有为每个 API 项目设置 Java 代码。

  1. 那么在这种情况下我该如何编写消费者驱动的测试呢?
  2. 或者我是否需要在开始测试之前设置每个消费者 Java 项目?
  3. 或者我是否需要向所有 API 提供者/消费者请求有关此框架的信息,并要求他们实现相同的功能。

目前,测试仅限于通过 Postman 进行的手动测试和开发人员进行的单元测试。

0 投票
3 回答
3287 浏览

java - 尽管通过了测试,但未生成 Pact 文件

我正在尝试生成 Pact 文件。测试在 Eclipse 中的“Run As-Junit Test”时通过。但是,无法真正理解为什么没有生成 Pact 合同文件。你能帮忙吗?下面是我的测试代码:

我的 POM 文件如下:

0 投票
1 回答
166 浏览

jvm - 让 pact-jvm 支持其他协议?

让 pact-jvm 支持 HTTP 以外的协议,比如 Thrift ( https://thrift.apache.org ) 有多难?换句话说,pact-jvm 的实现是否与 HTTP 紧密耦合?谢谢。

0 投票
1 回答
139 浏览

java - 在 Java 中设置一个真实的服务后,有没有办法设置目标端口?

我正在尝试验证提供者方面的协议合同,并想先设置真实服务,然后获取服务端口。所以基本上,我想做以下事情:

有没有办法做到这一点?

0 投票
1 回答
342 浏览

javascript - Determining when karma-pact mock server has started

We're using the karma-pact plugin to run our pact JS client tests, based on the example from https://github.com/pact-foundation/pact-js/blob/master/karma/mocha/client-spec.js .

In the example there's a timeout in the before(), I believe to ensure the mock service has started before running the tests (see comment "required for slower Travis CI builds").

I'm reluctant to set a fixed timeout in our tests as it'll either be too short or too long in different environments (e.g. CI vs local) and so I was looking for a way to check if the server has started.

I'd tried using the pact API https://github.com/pact-foundation/pact-node#check-if-a-mock-server-is-running , however this appears to start a new mock server which conflicts with the one started by the karma-pact plugin (an Error: kill ESRCH error is reported when trying to run pact.createServer().running from within a test).

Is there a way to determine if the mock server has started up e.g. by waiting for a URL to become available? Possibly there's a way to get a reference the mock server started by the karma-pact plugin in order to use the pact-node API?

0 投票
1 回答
169 浏览

ruby - 提取 PACT 中使用的确切值(当匹配通过正则表达式完成时,作为最初未知的值))

我有一个 ruby​​ pact 模拟服务提供商来捕获我的请求。我想提取请求中提供的确切值(由 Pact.term / Pact.like 匹配),以便在 pact 服务提供商回答请求后对该值进行进一步处理。

一个例子:密码重置功能。代码对邮件服务进行 API 调用,提供密码重置链接作为参数。Pact 捕获请求并成功模拟它,验证数据。我将 reset_link 作为参数之一(一个 Json 主体)传递。这在 Pact.term 中得到匹配。都好。但我也想恢复请求中使用的确切值(比如 reset_link: ' http://sample.com/reset-password?key=12345 '),所以我可以发出后续请求并检查那个确切的链接确实允许成功重置密码。

现在,如果我直接发送电子邮件,这很容易,我只需解析 Mail::TestMailer.deliveries.last

我怎样才能做到这一点?

我已经浏览了代码,即使创建 Pact::SomethingLike 子类也行不通,因为比较方法是一个可爱的函数式编程模块,而不是类中的方法。

是否有前/后钩子,或获取整个网络请求的方法?

PS:我知道这通常由我使用的底层库进行测试。库批准的调整功能的方法是覆盖某些方法,我需要重新测试整个功能。

PPS:这不是铁轨,而是罗达。

谢谢安德烈