反应式存储库不保存对象

Posted

技术标签:

【中文标题】反应式存储库不保存对象【英文标题】:Reactive repository does not save an object 【发布时间】:2019-09-25 23:59:29 【问题描述】:

我想我不太了解反应式存储库和使用它的处理程序是如何工作的。我编写了一个特殊的测试类,只是为了使用存储库测试最简单的处理程序

 @SpringBootTest
 class TestRepository() 

   @Autowired
   lateinit var myRepo: myRepo

   @Autowired
   lateinit var myHandler: MyHandler

   @Test
    fun `save with a handler`() 
    val myObject = MyObject()
    myHandler.save(request).subscribe()

    StepVerifier.create (myRepository.count() ) <--this does not work
        .expectNext (1L )
        .expectComplete().verify()
   

   @Test
   fun `test only database saving`() 
      val object = MyObject()

      myRepo.save(myRepo).subscribe()

      StepVerifier.create (myRepo.count() ) <-- this works
        .expectNext (1L )
        .expectComplete().verify()
   

我的处理程序和存储库按以下方式定义:

  @Service
  class MyHandler(private val myRepository: MyRepository) 

     fun save(object: MyObject): Mono<MyObject> 
       return myRepository.save(request)
     
  

  @Repository
  interface MyRepo : ReactiveMongoRepository<MyObject, String> 

    fun save(request: MyObject): Mono<MyObject>
  

我也尝试过使用subscribe 方法,但仍然看不到结果。

我应该纠正什么?

【问题讨论】:

【参考方案1】:

使用Mono.then 函数链接savecount 函数并获得生成的Mono:

@Test
fun `save with a handler`() 
  val countAfterSave = myHandler.save(MyObject()).then(myRepository.count());

  StepVerifier.create(countAfterSave)
    .expectNext(1L)
    .expectComplete()
    .verify()

【讨论】:

以上是关于反应式存储库不保存对象的主要内容,如果未能解决你的问题,请参考以下文章

反应原生 fs 库不写文件

如何将反应js状态保存到本地存储中

反应原生 redux-persist 切片

在反应渲染方法中访问对象属性

javascript 反应本机登录谷歌和谷歌驱动器。卸载应用程序时保存存储并再次获取数据。

如何更改保存在反应组件的 useRef 对象中的按钮的 onClick 功能?