R2DBC集成测试持续存在的数据无法通过API获得

发布于 2025-01-25 06:07:58 字数 641 浏览 8 评论 0原文

我正在尝试使用R2DBC学习春季Web通量。我试图执行测试用例如下:

  1. 通过直接调用存储库BEAN来保存数据。
  2. 通过使用WebFlux测试客户端调用API来获取保存的数据。

在成功插入两个记录时,第二步不会返回任何数据。

    @Test
    void searchItem() {
        // Arrange
        itemRepository.saveAll(createItemEntitiesToInsert());
        // Act
        final var responseBody = get("/api/v1/items/search?name=ite")
            .returnResult(ItemResource.class)
            .getResponseBody();
        // Assert
        StepVerifier.create(responseBody)
            .expectNextCount(2)
            .expectComplete()
            .verify();
    }

看起来像某些与上下文有关的问题,但不确定发生了什么:(

I am trying to learn Spring web flux with r2dbc. I am trying to execute a test case as follows:

  1. Save the data by calling the save method directly via a repository bean.
  2. Fetch the saved data by invoking the API using the webflux test client.

Step two does not return any data while the two records were getting inserted successfully.

    @Test
    void searchItem() {
        // Arrange
        itemRepository.saveAll(createItemEntitiesToInsert());
        // Act
        final var responseBody = get("/api/v1/items/search?name=ite")
            .returnResult(ItemResource.class)
            .getResponseBody();
        // Assert
        StepVerifier.create(responseBody)
            .expectNextCount(2)
            .expectComplete()
            .verify();
    }

Looks like some context-related issue but not sure what is happening :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独闯女儿国 2025-02-01 06:07:59

感谢 martin

在调用saveall方法之后,我没有阻止saveall方法,而是立即使用API​​获取数据。我用saveall(items).blocklast()将其阻止。因此,正确的代码应该是:

    @Test
    void searchItem() {
        // Arrange
        itemRepository.saveAll(TestHelper.createItemEntitiesToInsert()).blockLast();
        // Act
        final var responseBody = get("/api/v1/items/search?name=ite")
            .returnResult(ItemResource.class)
            .getResponseBody();
        // Assert
        StepVerifier.create(responseBody)
            .expectNextCount(2)
            .expectComplete()
            .verify();
    }

Thanks to Martin,

After calling the saveAll method of the repository, I was not blocking the saveAll method and was immediately going for fetching the data with APIs. I blocked it with saveAll(items).blockLast(). So the correct code should be:

    @Test
    void searchItem() {
        // Arrange
        itemRepository.saveAll(TestHelper.createItemEntitiesToInsert()).blockLast();
        // Act
        final var responseBody = get("/api/v1/items/search?name=ite")
            .returnResult(ItemResource.class)
            .getResponseBody();
        // Assert
        StepVerifier.create(responseBody)
            .expectNextCount(2)
            .expectComplete()
            .verify();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文