0

我正在研究 The Definitive Guide to Grails 2 中的示例,所有单元测试都与我使用的版本(2.3.7)不同。

我要做的是测试如果确认密码和密码字段不同,我在 UserController 中的注册方法会抛出错误。这本书给出了这样的测试

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


}

我的用户控制器看起来像这样:

    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:无法在 com.gtunes.UserControllerSpec.test PasswordsDoNotMatch(UserController Spec.groovy:38) 处获取空对象上的属性“用户”

看来我编写的代码实际上并没有按照我预期的方式创建用户,我不确定我做错了什么,或者测试这个的正确方法。我已阅读此处的文档: Grails testing,但我不确定我缺少什么。任何帮助表示赞赏。

4

0 回答 0