Wiremock 使用SpringCloudContract测试前端到后端的交互

Wiremock 使用SpringCloudContract测试前端到后端的交互,wiremock,spring-cloud-contract,Wiremock,Spring Cloud Contract,我想使用springcloudcontract()来测试前端到后端的交互:特别是捕捉400http错误等错误 我可以用SpringCloudContract存根管理器运行我的存根。但是我注意到,当实际后端返回400时,运行的存根返回404未找到错误 这是我的合同: description: | Signup use case ``` given: a user signs up when: the sign up request is

我想使用springcloudcontract()来测试前端到后端的交互:特别是捕捉
400
http错误等错误

我可以用SpringCloudContract存根管理器运行我的存根。但是我注意到,当实际后端返回
400
时,运行的存根返回
404
未找到错误

这是我的合同:

description: |
    Signup use case
    ```
    given:
       a user signs up
    when:
       the sign up request is valid
    then:
       the user is signed up
     ```
request:
    method: POST
    url: /api/signup
    body:
        userAccountType: PARENTS
        email: john@example.com
        firstName: John
        plainPassword: secret
        address:
            placeId: 'an_id'
            description: '10 Downing Street'
    headers:
        Content-Type: application/json
response:
    status: 200
如果我的前端(即Angular)只是发出一个Http
POST
,比如说缺少
email
字段,那么我希望运行的存根返回一个
400


如果有人能分享最佳实践或技巧,以便更好地利用Spring Cloud Contract进行前端/后端测试,我将不胜感激。

尽管我同意Marcin在评论中所说的


如果得到404,则意味着WireMock找不到存根。这意味着您的请求>与WireMock存根不匹配


您应该[为每个无效请求]创建另一个带有[a]缺失字段的合同,并>用状态代码400标记它

。。。也许有一种方法可以骗你一点

您可以为点击正确URL返回400的任何请求创建低优先级契约。就其本身而言,这意味着对该URL的每次调用都将返回400

然后使用正确的参数创建符合正确URL的合同,以返回200和预期响应,并将其优先级设置为高。由于这些合同重叠,优先级确保返回200而不是400

任何其他URL仍将返回404


免责声明:我自己并没有尝试过这个方法。

尽管我同意Marcin在评论中所说的


如果得到404,则意味着WireMock找不到存根。这意味着您的请求>与WireMock存根不匹配


您应该[为每个无效请求]创建另一个带有[a]缺失字段的合同,并>用状态代码400标记它

。。。也许有一种方法可以骗你一点

您可以为点击正确URL返回400的任何
请求创建低优先级契约。就其本身而言,这意味着对该URL的每次调用都将返回400

然后使用正确的参数创建符合正确URL的合同,以返回200和预期响应,并将其优先级设置为高。由于这些合同重叠,优先级确保返回200而不是400

任何其他URL仍将返回404


免责声明:我自己并没有真正尝试过这一点。

如果您得到404,这意味着WireMock找不到存根。这意味着你的请求与WireMock存根不匹配。我明白了。但是,我如何确保我的消费者(这里是前端)不会向我的生产者API发送无效请求,从而导致
400
?我是否必须为每个无效请求组合编写合同(状态为
400
)?您应该创建另一个带有缺失字段的合同,并将其标记为状态代码400,那么状态代码400合同将与无效请求组合一样多?如果这是您的业务要求,则是。使用groovy,您可以提取大部分设置并返回此类合同的列表,如果您得到404,这意味着WireMock找不到存根。这意味着你的请求与WireMock存根不匹配。我明白了。但是,我如何确保我的消费者(这里是前端)不会向我的生产者API发送无效请求,从而导致
400
?我是否必须为每个无效请求组合编写合同(状态为
400
)?您应该创建另一个带有缺失字段的合同,并将其标记为状态代码400,那么状态代码400合同将与无效请求组合一样多?如果这是您的业务要求,则是。使用groovy,您可以提取大部分设置并返回此类契约的列表