Java 消费者和 Java 脚本提供者的合同测试
Contract test for a Java consumer and JavaScript provider
我们有 2 项服务,其中一项是另一项的消费者。消费者用Java编写,提供者用Java脚本编写。
在消费者方面,我们使用 pact-jvm 定义了消费者合同测试,我们能够生成合同。在本合同中,响应定义如下:
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": [
"test"
]
},
在我们的供应商上,我们现在正尝试使用 pact-js 定义供应商合同测试,但我们遇到了一个问题,在 pact-js 中我们使用 MessageProviderPact
来验证合同。但是当 运行 测试时,正文应该在这样的内容属性中:
Key: - is expected
+ is actual
Matching keys and values are not shown
-[
- "test"
-]
+{
+ "contents": {
+ "statusCode": 200,
+ "body": "[test]"
+ }
+}
用于契约验证的代码
const p = new MessageProviderPact({
messageProviders: {
'': handler
},
provider: 'provider-service',
pactUrls: [
path.resolve(
process.cwd(),
'pacts',
'consumer-service-provider-service.json'
)
]
});
知道如何解决这个问题吗?是否可以在消费者端使用带有内容键的类似消息结构?或者我们可以在提供商方面以任何其他方式解决它
MessageProviderPact
用于消息队列类型的交互,而不是 HTTP 交互。我认为你需要标准 Verifier
class (https://github.com/pact-foundation/pact-js/#provider-api-testing):
const { Verifier } = require('@pact-foundation/pact');
let opts = {
...
};
new Verifier(opts).verifyProvider().then(function () {
// do something
});
我们有 2 项服务,其中一项是另一项的消费者。消费者用Java编写,提供者用Java脚本编写。
在消费者方面,我们使用 pact-jvm 定义了消费者合同测试,我们能够生成合同。在本合同中,响应定义如下:
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": [
"test"
]
},
在我们的供应商上,我们现在正尝试使用 pact-js 定义供应商合同测试,但我们遇到了一个问题,在 pact-js 中我们使用 MessageProviderPact
来验证合同。但是当 运行 测试时,正文应该在这样的内容属性中:
Key: - is expected
+ is actual
Matching keys and values are not shown
-[
- "test"
-]
+{
+ "contents": {
+ "statusCode": 200,
+ "body": "[test]"
+ }
+}
用于契约验证的代码
const p = new MessageProviderPact({
messageProviders: {
'': handler
},
provider: 'provider-service',
pactUrls: [
path.resolve(
process.cwd(),
'pacts',
'consumer-service-provider-service.json'
)
]
});
知道如何解决这个问题吗?是否可以在消费者端使用带有内容键的类似消息结构?或者我们可以在提供商方面以任何其他方式解决它
MessageProviderPact
用于消息队列类型的交互,而不是 HTTP 交互。我认为你需要标准 Verifier
class (https://github.com/pact-foundation/pact-js/#provider-api-testing):
const { Verifier } = require('@pact-foundation/pact');
let opts = {
...
};
new Verifier(opts).verifyProvider().then(function () {
// do something
});