我目前遇到的问题是使用grails 2.4.2验证spock中的约束消息。在测试时,我不断收到默认的错误消息,而不是我的自定义消息。但是,当我打印到使用Grails错误标签的视图时,我收到了正确的错误消息。我甚至从message.propperties中删除了默认值。 这里是我的规格是什么样子:Grails:使用spock测试约束错误消息
import com.fishLogger.user.User
import com.fishLogger.DomainErrorHandling
import grails.test.mixin.TestFor
import org.springframework.context.MessageSource
import spock.lang.Specification
/**
* See the API for {@link grails.test.mixin.domain.DomainClassUnitTestMixin} for usage instructions
*/
@TestFor(User)
class UserSpec extends Specification {
MessageSource messageSource
def setup() {
DomainErrorHandling.enable(new User())
}
def cleanup() {
}
void "test Invalid User Name Errors"(){
when:
User user = new User(userName:userName, password:password, email:email)
//user.errors.allErrors.get(0).code
user.validate()
then:
user.errorMessage()==expectedMessage
where:
userName | password | email | expectedMessage
"" |"vailidPassword" | "[email protected]" | "User name must be entered"
//"asd" |"vailidPassword" | "[email protected]" | "User name must be atleast 6 chacters long"
//" " |"vailidPassword" | "[email protected]" | "User name must be entered"
//"aaaaaaaaaaaaaaaaaaaaa" |"vailidPassword" | "[email protected]" | "User name can not be greater than 20 characters"
}
启用其中一个电话加载帮助方法域抢错误信息
class DomainErrorHandling {
public static void enable(Object obj){
obj.class.metaClass.errorMessage = {
MessageSource messageSource = Holders.applicationContext.getBean("messageSource")
def errorString = delegate?.errors?.allErrors?.collect{error ->
messageSource.getMessage(error,Locale.default)
}?.join(' \n')
return errorString
}
}
}
任何帮助或指导将是巨大的。我知道测试错误消息应该更多的是UI测试,但我真的更愿意用我的单元测试来测试它们。