Ожидаемое значение выражения jsonPath, но возвращает список значений - PullRequest
0 голосов
/ 22 мая 2019

Я хочу проверить, что ответ "class_type" имеет значение "REGION".

Я тестирую API Springboot, используя mockMvc.MockHttpServletResponse выглядит следующим образом.

Status = 200
Error message = null
Headers = {Content-Type=[application/json;charset=UTF-8]}
Content type = application/json;charset=UTF-8
Body = 
{"result":true,
"code":200,
"desc":"OK",
"data":{"total_count":15567,
        "items": ... 
}}

это весь объект ответа.Давайте подробнее рассмотрим, особенно предметы.

 "items": [
      {
        "id": ...,
        "class_type": "REGION",
        "region_type": "MULTI_CITY",
        "class": "com.model.Region",
        "code": "AE-65GQ6",
        ...

      },
      {
        "id": "...",
        "class_type": "REGION",
        "region_type": "CITY",
        "class": "com.model.Region",
        "code": "AE-AAN",
        ...

      },

Я пытался использовать jsonPath.

@When("User wants to get list of regions, query is {string} page is {int} pageSize is {int}")
    public void userWantsToGetListOfRegionsQueryIsPageIsPageSizeIs(String query, int page, int pageSize) throws Exception {
        mockMvc().perform(get("/api/v1/regions" ))
                .andExpect(status().is2xxSuccessful())
                .andDo(print())
                .andExpect(jsonPath("$.data", is(notNullValue())))
                .andExpect(jsonPath("$.data.total_count").isNumber())
                .andExpect(jsonPath("$.data.items").isArray())
                .andExpect(jsonPath("$.data.items[*].class_type").value("REGION"));

        log.info("지역 목록");
    }

, но

jsonPath("$.data.items[*].class_type").value("REGION")

return

java.lang.AssertionError: Got a list of values ["REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION","REGION"] instead of the expected single value REGION

Я хочу просто проверить, что «$ .data.items [*]. Class_type» имеет «REGION».

Как я могу это изменить?

1 Ответ

1 голос
/ 22 мая 2019

Один из вариантов - проверить, есть ли в вашем массиве элементы с class_type , равным 'REGION' :

public static final String REGION = "REGION";

mockMvc().perform(get("/api/v1/regions"))
.andExpect(jsonPath("$.data.items[?(@.class_type == '" + REGION + "')]").exists());
...