我目前遇到的問題是使用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測試,但我真的更願意用我的單元測試來測試它們。