Pact 模拟服务器错误:请求不匹配 - 我该如何调试?

问题描述 投票:0回答:1

我定义了一个 Pact,但是当对模拟进行指定的 PUT 调用时,我收到请求不匹配错误。我已经确认发送到模拟的消息字符串匹配。我在网上搜索过,尝试启用/禁用标头等,但没有成功。

有谁知道如何调试这个或者你能看到我的 Pact 可能做错了什么吗?

var config = new PactConfig
{
    PactDir = PactDir,
    Outputters = new List<IOutput> { new XunitOutput(output), new ConsoleOutput() },
    LogLevel = PactLogLevel.Trace
};

_pact = PactNet.Pact.V3(_consumerName, _providerName, config).WithHttpInteractions();
    // Define overall contract and pact mock behavior
_pact
    // Define request made by consumer to provider
    .UponReceiving("Object has null callback URL")
        .Given("my provider state here")
        .WithRequest(HttpMethod.Put, "/do_thing")
        .WithHeader("Accept", "application/json; charset=utf-8")
        .WithHeader("content-length", "170")
        .WithHeader("Authorization", "Bearer")
        .WithHeader("Host", mockUrl)
        .WithBody(requestBody, "application/json; charset=utf-8")
    // Define response by provider to consumer 
    .WillRespond()
        .WithStatus(HttpStatusCode.OK)
        .WithHeader("Content-Type", "application/json; charset=utf-8")
        .WithJsonBody(expectedJobResponseDyn);

await _pact
    .VerifyAsync(async context =>
    {
        mockUrl = context.MockServerUri.ToString().TrimEnd('/');
        MyObject myObject = new() { CallbackUri = mockUrl};
        requestBody = JsonSerializer.Serialize(myObject);

        // Act //////////
        ResponseObject result = await client.SendRequestAsync(myObject);

        // Assert //////////
        result.Code.Should().Be(someOtherObj.Code);
        result.Message.Should().Be(someOtherObj.Message);
    });

这是我收到的回复消息:

{"error":"Request-Mismatch : HttpRequest { method: \"PUT\", path: \"/do_thing\", query: None, headers: Some({\"host\": [\"127.0.0.1:58615\"], \"authorization\": [\"Bearer\"], \"content-length\": [\"170\"], \"content-type\": [\"application/json; charset=utf-8\"]}), body: Present(b\"{\\\"JobId\\\":\\\"00000000-0000-0000-0000-000000000000\\\",\\\"CallbackUri\\\":\\\"http://127.0.0.1:58615\\\"}\", Some(ContentType { main_type: \"application\", sub_type: \"json\", attributes: {\"charset\": \"utf-8\"}, suffix: None }), None), matching_rules: MatchingRules { rules: {} }, generators: Generators { categories: {} } }"}
c# xunit pact pact-net
1个回答
0
投票

该测试确实应该有一个人类友好的输出到标准输出,您显示的日志消息实际上是一条调试消息。如果这就是您得到的全部内容,那么这应该是 Pact .NET 的错误报告或功能请求,以使其更像其他客户端语言。

很难说,但也许您期望发送的正文 (

requestBody 
) 与您发送的内容不匹配:

{"JobId":"00000000-0000-0000-0000-000000000000","CallbackUri":"http://127.0.0.1:58615"}
© www.soinside.com 2019 - 2024. All rights reserved.