unit-testing - 如何在Grails 2单元测试中获取spring security提供的currentUser
问题描述
大家好,我在获取 spring 提供的当前用户时遇到了麻烦。
这是我的单元测试代码
void "Test if adding project will sucess"() {
given:
def createProjectMock = mockFor(UserService)
createProjectMock.demand.createNewProject { Map projectMap ->
return true
}
controller.userService = createProjectMock.createMock()
when: "saveProject is execute"
controller.saveProject()
then: "page will to the list to view the saved project"
response.redirectedUrl == '/user/index2'
}
这是我的控制器
def saveProject(ProjectActionCommand projectCmd) {
def currentUser = springSecurityService.currentUser
if (projectCmd.hasErrors()) {
render view: 'createProject', model: [projectInstance: projectCmd, user:currentUser]
} else {
def getProjectMap = [:]
getProjectMap = [
projectName: params.projectName,
user: currentUser
]
def saveProject = userService.createNewProject(getProjectMap)
if (saveProject) {
redirect view: 'index2'
} else {
render 'Error upon saving'
}
}
}
这是我的服务
Project createNewProject(Map projectMap){
def createProject = new Project()
createProject.with {
projectName = projectMap.projectName
user = projectMap.user
}
createProject.save(failOnError:true, flush: true)
}
我总是收到这个错误:
无法在空对象上获取属性“currentUser”。
希望您能够帮助我。谢谢
解决方案
无法在空对象上获取属性“currentUser”。
表示你没有嘲笑过springSecurityService。让我们在设置部分进行(我假设它在此类中的其他方法中也可能有用):
def springSecurityService
def setup() {
springSecurityService = Mock(SpringSecurityService)
controller.springSecurityService = springSecurityService
}
此时,您的代码将开始工作。但是请记住,您始终可以模拟实际登录的用户并随时对其进行测试:
User user = Mock(User)
springSecurityService.currentUser >> user
推荐阅读
- javascript - 当我得到一个包含一个(!)项目的数组时,我看到的是值的类型而不是值本身
- xcode - xcode GoogleGobileAds.h 文件未找到
- azure-devops - Azure DevOps YAML Pipelines - 他们可以从存储库中提取脚本吗?
- python - Python:将日期范围重叠到时间序列中
- amazon-web-services - IAM- AWS 访问和策略限制的切换角色
- java - gwt-dev - 具有相同包名的库
- mongodb - 如何在 Stitch 注册时将用户数据链接到他未来的帐户
- javascript - 用于登录 React 的中间件,类似于 Multer for Express JS
- python - 在板上搜索坐标更好的矩形
- google-apps-script - 即使在添加更多行后仍保持单元格之间的关系