Home > Enterprise >  mocking a request with a payload using wiremock
mocking a request with a payload using wiremock

Time:12-15

I'm currently trying to mock external server using Wiremock. One of my external server endpoint takes a payload. This endpoint is defined as follow :

  def sendRequestToMockServer(payload: String) = {
    for {
      request_entity <- Marshal(payload).to[RequestEntity]
      response <- Http().singleRequest(
          HttpRequest(
            method = HttpMethods.GET,
            uri = "http://localhost:9090/login",
            entity = request_entity
          )
        )
    } yield {
      response
    }
  }

To mock this endpoint using Wiremock, I have written the following code :

    stubFor(
      get(urlEqualTo("/login"))
        .willReturn(
          aResponse()
            .withHeader("Content-Type","application/json")
            .withBodyFile("wireMockResponse.json")
            .withStatus(200)
        )
        .withRequestBody(matchingJsonPath("requestBody.json"))
    )

where I Have defined the request body in the requestBody.json file.

But when I run tests , I keep getting an error indicating that the requested Url is not found.

I'm thinking that the error is related to this line withRequestBody(matchingJsonPath("requestBody.json")), because when I comment it the error disappear.

Any suggestions on how to work around this?

CodePudding user response:

matchingJsonPath does not populate a file at a provided filepath, but instead evaluates the JsonPath provided. See documentation.

I'm not entirely sure there is a way to provide the request body as a .json file. If you copy the contents of the file into the withRequest(equalToJson(_yourJsonHere_)), does it work? If it does, you could get the file contents as a JSON string above the definition and provide it to the function (or I guess, make a function to return a JSON string from a .json file).

Additionally, you could make a custom request matcher that does the parsing for you. I think I'd recommend this only if the above does not work.

  • Related