J'ai suivi les instructions ici: http://www.grails.org/doc/latest/guide/7.%20Validation.htmlGrails validateable fonctionnent pas pour le domaine non-persistant classe
et a ajouté dans config.groovy:
grails.validateable.classes = [liningtest.Warm']
Ensuite, on ajoute src/Groovy/chaud. groovy (c'est une classe de domaine non persistant):
package liningtest
import org.codehaus.groovy.grails.validation.Validateable
class Warm {
String name;
int happyCite;
Warm(String n, int h) {
this.name = n;
this.happyCite = h;
}
static constraints = {
name(size: 1..50)
happyCite(min: 100)
}
}
Mais ce jus t ne fonctionne pas (les deux "blank false" & "size: 0..25") pour la fonction "hasErrors". Il renvoie toujours faux, même lorsque le nom est> 25.
Est-ce un bug Grails, si oui, y a-t-il des solutions de rechange?
J'utilise Grails 1.3.3
MISE À JOUR: J'ai mis à jour le code simplifié. Et maintenant je sais que la contrainte "taille" ne peut pas être utilisée avec "vide", mais ne fonctionne toujours pas.
Ma classe de test dans test/unit/liningtest/WarmTests.groovy
package liningtest
import grails.test.*
class WarmTests extends GrailsUnitTestCase {
protected void setUp() {
super.setUp()
}
protected void tearDown() {
super.tearDown()
}
void testSomething() {
def w = new Warm('Hihi', 3)
assert (w.happyCite == 3)
assert (w.hasErrors() == true)
}
}
Et l'erreur je suis arrivé:
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="1" failures="0" hostname="evolus-50b0002c" name="liningtest.WarmTests" tests="1" time="0.062" timestamp="2010-12-16T04:07:47">
<properties />
<testcase classname="liningtest.WarmTests" name="testSomething" time="0.062">
<error message="No signature of method: liningtest.Warm.hasErrors() is applicable for argument types:() values: []
Possible solutions: hashCode()" type="groovy.lang.MissingMethodException">groovy.lang.MissingMethodException: No signature of method: liningtest.Warm.hasErrors() is applicable for argument types:() values: []
Possible solutions: hashCode()
at liningtest.WarmTests.testSomething(WarmTests.groovy:18)
</error>
</testcase>
<system-out><![CDATA[--Output from testSomething--
]]></system-out>
<system-err><![CDATA[--Output from testSomething--
]]></system-err>
</testsuite>
MISE À JOUR 2: Quand je ne me Test unitaire, mais essayez d'appeler hasErrors dans le contrôleur, il s'exécute mais retourne la valeur false. (hasErrors renvoie false avec Warm ('Hihi', 3)). Est-ce que quelqu'un a une idée?
MISE À JOUR 3: J'ai suivi la méthode Victor, et maintenant le problème est résolu si j'appelle validate() avant hasErrors(). Mais je ne comprends toujours pas, pourquoi les contrôleurs "grails generate-all" n'ont pas besoin d'appeler validate() avant d'utiliser hasErrors()?
Avez-vous appelé validate() avant? Pouvons-nous avoir un code d'action complet? –
Et aussi les propriétés de la classe User. –
Je viens d'appeler la fonction hasErrors(), pas valider(). Oui, je vais mettre à jour la question bientôt. –