Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 当参数具有grailsparametermap属性时,如何测试验证错误?_Unit Testing_Grails_Integration Testing_Grails 2.0_Grails Domain Class - Fatal编程技术网

Unit testing 当参数具有grailsparametermap属性时,如何测试验证错误?

Unit testing 当参数具有grailsparametermap属性时,如何测试验证错误?,unit-testing,grails,integration-testing,grails-2.0,grails-domain-class,Unit Testing,Grails,Integration Testing,Grails 2.0,Grails Domain Class,我正在使用grails,我想断言字段是否有错误。这适用于firstName和lastName,但不适用于address。基本上,以下参数会导致地址上的验证错误,因为对于区域MARIOLAND是不可接受的。断言应该通过,但失败了。也许我提取地址的方法不正确。谢谢你的帮助!谢谢大家! controller.params.putAll( firstName : "asd", lastName : "asd", email : "

我正在使用grails,我想断言字段是否有错误。这适用于firstName和lastName,但不适用于address。基本上,以下参数会导致地址上的验证错误,因为对于区域MARIOLAND是不可接受的。断言应该通过,但失败了。也许我提取地址的方法不正确。谢谢你的帮助!谢谢大家!

controller.params.putAll(

            firstName : "asd",
            lastName : "asd",
            email : "asd@gmail.com",
            password : "asd",
            address :  new GrailsParameterMap([country: 'usa', address1: "24 Willey Mayes Plaza", city: "San Francisco", area: "MARIOLAND", postalCode: "94107"], controller.params.getRequest())


            )



        def model = controller.create()
        def user = model.userInstance
        user.validate()


        assertTrue user.errors.hasFieldErrors("address")
        //the above assertion should pass since MARIOLAND on area of address causes validation error, but it fails

我认为这与以下两个仍然悬而未决的问题有关

deepValidate不适用于关联或关联字段。以下是我对您的测试的期望:

import grails.test.mixin.TestFor
import spock.lang.Specification
import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap

@TestFor(UserController)
@TestMixin(GrailsUnitTestMixin)
@Mock([User, Address])
class UserControllerSpec extends Specification {

    void setup(){
        mockForConstraintsTests User
    }

    void "test something"() {
        given:
        controller.params.putAll(
            firstName : "asd",
            lastName : "asd",
            email : "asd@gmail.com",
            password : "asd",
            address :  new GrailsParameterMap([country: 'usa', 
                           address1: "24 Willey Mayes Plaza", 
                           city: "San Francisco", 
                           area: "MARIOLAND", 
                           postalCode: "94107"], controller.request)
        )

        // Also fails if we set address to params
        /*controller.params.address = [
              country: 'usa', address1: "24 Willey Mayes Plaza", 
              city: "San Francisco", area: "MARIOLAND", postalCode: "94107"
        ]*/

        when:
        def model = controller.index()
        def user = model.userInstance

        then:
        !user.validate() // FAILS
        user.errors.hasFieldErrors("address")
    }

    void "test address"() {
        given:
        controller.params.putAll(
            new GrailsParameterMap([country: 'usa', 
                address1: "24 Willey Mayes Plaza", city: "San Francisco", 
                area: "MARIOLAND", postalCode: "94107"], 
             controller.params.request) )

        when:
        def model = controller.address()
        def address = model.addressInstance
        mockForConstraintsTests Address

        then:
        !address.validate() // PASSES
        address.errors.hasFieldErrors("area")
    }
}

class User {
    String firstName, lastName, email, password
    Address address

    static constraints = {
        // Tests will pass if address validated explicitly
        //address validator: { it.validate() }
    }
}

class Address {
    String country, address1, city, area, postalCode

    static constraints = {
        area notEqual: "MARIOLAND"
    }
}

class UserController {
    def index() { 
        def user = new User(params)
        [userInstance: user]
    }

    def address(){
        def address = new Address(params)
        [addressInstance: address]
    }
}

您是否使用mockforcontainstest、java.util.List来测试约束?你能添加实际的测试和域类来完成这个问题吗?对不起,我只是在寻找一种像我这样断言语句的方法。i、 我只想选择地址字段并检查它是否有错误。应该有办法的。是的,有办法。请尝试user.address.validate和user.address.errors.hasFieldErrorsarea@USER3256520不幸的是,这不起作用。我得到一个错误:java.lang.NullPointerException:无法在此行user.address.validateGrails的哪个版本上调用null对象上的方法validate?你能把对你的问题的评论也写下来吗?我用的是2.2.0。对不起,你对我的问题的评论是什么意思?