当前位置: 首页 > 知识库问答 >
问题:

Java使用者和JavaScript提供者的契约测试

梁丘权
2023-03-14

我们有两个服务,其中一个是另一个的消费者。使用者是用Java编写的,提供者是用JavaScript编写的。

在消费者端,我们使用pact-jvm定义了一个consumer-contract-test,并且能够生成一个合同。在此契约中,响应的定义如下:

"response": {
  "status": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": [
    "test"
  ]
},
Key: - is expected 
            + is actual 
       Matching keys and values are not shown

       -[
       -  "test"
       -]
       +{
       +  "contents": {
       +    "statusCode": 200,
       +    "body": "[test]"
       +  }
       +}

用于pact验证的代码

const p = new MessageProviderPact({
        messageProviders: {
            '': handler
        },
        provider: 'provider-service',
        pactUrls: [
            path.resolve(
                process.cwd(),
                'pacts',
                'consumer-service-provider-service.json'
            )
        ]
    });

有什么办法解决这个问题吗?是否可能在消费者端使用带有内容键的类似消息结构?或者我们可以在提供方用其他方法解决它吗

共有1个答案

欧阳高昂
2023-03-14

MessageProviderPact用于消息队列类型的交互,而不是HTTP交互。我认为您需要标准的verifier类(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
});
 类似资料:
  • 我正在开发一个带有一些公共API的静态C++库。我必须为库提供的API实现使用者驱动的契约。但在我的情况下,我必须向消费者提供他们同意的合同。 有没有任何方法可以在文件中定义合同,并且可以测试所有的API。这样做的主要目的是隔离测试。 请您分享一些输入来实现文件中定义的合同,并为这些合同编写一个测试程序。

  • The Ethereum eco-system provides many methods of interacting with the blockchain. In ethers.js we expose a Provider API that covers the breadth of operations, however often it is useful to inter-opera

  • 提供者(Provider) 是一个连接以太坊网络的抽象,用与查询以太坊网络状态或者发送更改状态的交易。 EtherscanProvider 和 InfuraProvider 提供连接公开的第三方节点服务提供商,无需自己运行任何以太坊节点。 JsonRpcProvider 和 IpcProvider 允许连接到我们控制或可以访问的以太坊节点(包括主网,测试网,权威证明(PoA)节点或Ganache)

  • 我有一个场景,其中我的提供者服务提供了3个功能。在消费者端,我有3个不同的类来为这3个功能编写测试。当生成pact文件时,它包含了具有相同的使用者-提供者组合的所有测试。到目前为止还不错。 示例: ConsumerTestClass1 ConsumerTestClass2 ConsumerTestClass3 所有定义以下协议 @pact(provider=provider,consumer=co

  • 在 Pagination 和 Sorting 部分, 我们已经介绍了如何允许终端用户选择一个特定的数据页面,根据一些字段对它们进行展现与排序。 因为分页和排序数据的任务是很常见的,所以Yii提供了一组封装好的data provider类。 数据提供者是一个实现了 yii\data\DataProviderInterface 接口的类。 它主要用于获取分页和数据排序。它经常用在 data widge