如何测试服务器发送事件API(用Spring 5 Webflux编写),当需要执行操作以生成新的事件时,如何测试?

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

我正试图按照以下教程中解释的方式测试我的SSE API。https:/docs.spring.iospringdocscurrentspring-framework-referencetesting.html#webtestclient-stream。 .

不幸的是,它对我不起作用。为了生成下一个事件,有必要执行一些动作来触发它。我不能在等待WebTestClient的响应时进行操作(我没有找到添加这样的处理程序的可能性)。

我找到了一个变通的办法,就是创建单独的线程,定期触发生成事件,但这并不优雅。有什么更好的方法吗?

TimerTask task = new TimerTask() {
        public void run() {
                while (true) {
                        //code that trigger generating event periodically
                }
        }
};
Timer timer = new Timer("Timer");
long delay = 1000L;
timer.schedule(task, delay);

FluxExchangeResult<MyEvent> result = client.get().uri("/events")
        .accept(TEXT_EVENT_STREAM)
        .exchange()
        .expectStatus().isOk()
        .returnResult(MyEvent.class); 

Flux<Event> eventFlux = result.getResponseBody();

StepVerifier.create(eventFlux)
        .expectNext(person)
        .expectNextCount(4)
        .consumeNextWith(p -> ...)
        .thenCancel()
        .verify();
java spring project-reactor server-sent-events webtestclient
1个回答
0
投票

我有类似的问题。如果我理解正确的话,你想发布某种消息,然后检查是否收到该消息。如果是这样的话,那么你应该使用订阅和提供消费者。下面是一个例子。

FluxExchangeResult<MyEvent> result = client.get().uri("/events")
    .accept(TEXT_EVENT_STREAM)
    .exchange()
    .expectStatus().isOk()
    .returnResult(MyEvent.class)
    .getResponseBody()
    .subscribe(new Consumer<MyEvent>() {
        @Override
        public void accept(String event) {
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.