我正在完成Grails 2权威指南中的示例,所有单元测试都与我使用的版本(2.3.7)不同。
我尝试做的是测试如果确认密码和密码字段不相同,我在UserController中的register方法将抛出错误。这本书给出了这样的测试
void testPasswordsDoNotMatch() {
request.method = 'POST'
params.login = 'henry'
params.password = 'password'
params.confirm = 'wrongPassword'
params.firstName = 'Henry'
params.lastName = 'Rollins'
def model = controller.register()
def user = model.user
assert user.hasErrors()
assert 'user.password.dontmatch' == user.errors['password'].code
}
很明显,这不起作用,所以我把它放在一起:
void "test PasswordsDoNotMatch"() {
given:
params.login='henry'
params.password='password'
params.confirm='wrongPassword'
params.firstName='Henry'
params.lastName='Rollins'
when:
def model = controller.register()
def user = model.user
then:
user.hasErrors()
'user.password.dontmatch' == user.errors['password'].code
}
我的UserController看起来像这样:
package com.gtunes
class UserController {
def register() {
if(request.method =='POST'){
def u = new User(params)
u.properties['login', 'password', 'firstName', 'lastName'] = params
if(u.password != params.confirm){
u.errors.rejectValue("password", "user.password.dontmatch")
return [user:u]
} else if(u.save()) {
session.user = u
redirect controller:"store"
} else {
return[user:u]
}
}
}
}
当我使用命令grails>运行测试时test-app UserController,我收到以下错误:
失败:| 测试PasswordsDoNotMatch(com.gtunes.UserControllerSpec) | java.lang.NullPointerException:无法获取属性' user'在null对象上 在com.gtunes.UserControllerSpec.test PasswordsDoNotMatch(UserController Spec.groovy:38)
似乎我所制作的代码实际上并没有按照我的预期创建用户,而且我不确定我做错了什么,或者正确的方法是测试一下。我在这里阅读了文档:Grails testing,我不确定我错过了什么。任何帮助表示赞赏。