如何解决使用JSON路径时,WebTestClient的DSL无法检索集合
我有一个Spring Boot position: relative
WebFlux应用程序。我正在使用2.3.2.RELEASE
为控制器构建测试,并注入@WebFluxTest
实例。一切正常,但是(这很愚蠢)我似乎找不到一种方法,可以使用JSONPath从响应中为给定的JSON元素/键检索其对应的值(元素的集合)。
这是测试:
WebTestClient
无论我使用什么表达式来获得@Test
void getById_Spec() { // HTTP 200 (OK)
final var expected = Entity.reconFoobling();
Mockito.when(service.findById(ArgumentMatchers.any(GetItemsCommand.class)))
.thenReturn(Flux.just(expected));
webClient.get()
.uri(URI_FROM.apply(expected.getId()))
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON)
.expectBody()
.jsonPath("$.length()").isEqualTo(1)
.jsonPath("$[0].code").isEqualTo("1001")
...
.jsonPath("$[0].alarms.length()").isEqualTo(2)
.jsonPath("$[0].alarms[0].lanes.length()").isEqualTo(1)
// .jsonPath("$[0].alarms[0].lanes").isEqualTo(List.of("PRIMARY"))
// .jsonPath("$[0].alarms[0].lanes.").isEqualTo(List.of("PRIMARY"))
// .jsonPath("$[0].alarms[0].lanes.*").isEqualTo(List.of("PRIMARY"))
// .jsonPath("$[0].alarms[0].lanes[*]").isEqualTo(List.of("PRIMARY"))
...
.jsonPath("$[0]._id").isEqualTo(1_100L);
Mockito.verifyNoInteractions(gateway,store);
}
(我首先在这里测试:https://jsonpath.com/),它都行不通,我总是得到:
$[0].alarms[0].lanes
...而且我知道我收到的JSON是正确的:
java.lang.AssertionError: JSON path "$[0].alarms[0].lanes" expected:<[PRIMARY]> but was:<null>
Expected :[PRIMARY]
Actual :null
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。