gpt4 book ai didi

unit-testing - Grails:使用 spock 测试约束错误消息

转载 作者:行者123 更新时间:2023-12-02 14:56:22 24 4
gpt4 key购买 nike

我目前在使用 grails 2.4.2 在 spock 中验证我的约束消息时遇到问题。测试时,我不断收到默认错误消息,而不是我的自定义消息。但是,当我使用 grails 错误标记打印到 View 时,我得到了正确的错误消息。我什至从 message.propperties 中删除了默认值。
这是我的规范的样子:

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" | "thisworks@email.com" | "User name must be entered"
//"asd" |"vailidPassword" | "thisworks@email.com" | "User name must be atleast 6 chacters long"
//" " |"vailidPassword" | "thisworks@email.com" | "User name must be entered"
//"aaaaaaaaaaaaaaaaaaaaa" |"vailidPassword" | "thisworks@email.com" | "User name can not be greater than 20 characters"
}

其中 enable 是将帮助方法加载到域以获取错误消息的调用
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 测试,但我真的更喜欢用我的单元测试来测试它们。

最佳答案

至于为什么从message.properties中删除它时仍然显示旧消息,请查看MessageSourceResolvable中的getDefaultMessage()。我猜您的自定义消息对测试不可见,要么是因为它的键拼写错误,要么是一些 Grails 测试引导问题。

我会尝试在您的 errorMessage() 方法中打印出错误的 getCodes(),并查看列出的任何代码是否是 message.properties 中自定义代码之一的关键。

关于unit-testing - Grails:使用 spock 测试约束错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com