测试中写入数据库的数据不可用于 REST 调用

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

我有一个测试,通过 JPA 存储库创建用户,然后通过

TestRestTemplate

登录该用户

问题是在我使用存储库创建用户后,网络调用无法在数据库中看到该用户,即使在调用

entityManager.flush()
entityManager.clear()

之后也是如此

有问题的方法:

fun _createUserGetLoginDTO(): LoginDTO{
        val password = passwordEncoder.encode(Instancio.create(String::class.java))
        val user = getTestUser()
        user.setPassword(password)
        latestUser = user
        itrUserRepository.save(user)
        val loginDTO = LoginDTO(user.username!!, password)
        entityManager.flush()
        entityManager.clear()
        return loginDTO
    }
    fun _createUserAndLoginReturningToken(): String {
        val loginDTO = _createUserGetLoginDTO()
        val tr = this.testRestTemplate.exchange(
            "http://localhost:$port/auth/login", HttpMethod.POST, HttpEntity<LoginDTO>(loginDTO),
            LoginResponse::class.java
        ) // Fails b/c user is not found?
        Assertions.assertThat(tr.statusCode.value()).isEqualTo(200)
        Assertions.assertThat(centralTokenStorageService.isValid(tr.body?.token!!)).isTrue()
        entityManager.flush()
        entityManager.clear()
        return tr.body?.token!!
    }

为了调试,我在用户详细信息服务中添加了一条消息,我可以看到我的用户查找失败,导致 403(我看到错误消息打印到 stderr):

@Bean
    fun userDetailsService(): UserDetailsService {
        return UserDetailsService { username ->
            val u = itrUserRepository.findByUn(username)
            if (!u.isPresent) {
                System.err.println("************ User not found ${username}")
                throw (UsernameNotFoundException("User $username not found"))
            }
            u.get()
        }
    }

如何使我插入的用户可用于 Web 层?

spring-boot kotlin spring-data-jpa spring-boot-test
1个回答
0
投票

找到了,这种注释组合对我有用。

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestDatabase
@AutoConfigureWebTestClient

由于某种原因,

AutoConfigure*
注释对其进行了排序。

如果您对某个问题投了反对票,请发表评论说明原因。

© www.soinside.com 2019 - 2024. All rights reserved.