Ich folgte den Anweisungen hier: http://www.grails.org/doc/latest/guide/7.%20Validation.htmlGrails validateable nicht für nicht-persistente Domain-Klasse arbeiten
und ergänzt in config.groovy:
grails.validateable.classes = [liningtest.Warm']
dann in src/groovy/Warm hinzugefügt. groovy (es ist ein nicht-persistent Domain-Klasse):
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)
}
}
Aber es jus t funktioniert nicht (beide "leer falsch" & "Größe: 0, 25") für die "hasErrors" -Funktion. Es gibt immer false zurück, auch wenn der Name> 25 ist.
Ist das ein Grails-Bug, wenn ja, gibt es einen Workaround?
Ich bin mit Grails 1.3.3
UPDATE: Ich habe den vereinfachten Code aktualisiert. Und jetzt weiß ich, dass Einschränkung "Größe" nicht mit "leer" verwendet werden kann, aber immer noch nicht funktioniert.
Meine Testklasse in Test/Einheit/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)
}
}
Und die Fehler, die ich bekam:
<?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>
UPDATE 2: Wenn ich nicht verwenden Unit-Test, aber versuchen, hasErrors im Controller aufzurufen, es läuft aber false-Wert zurück. (hasErrors geben false mit Warm ('Hihi', 3) zurück). Hat jemand eine Ahnung?
UPDATE 3: Ich folgte Victor Weg, und jetzt ist das Problem gelöst, wenn ich validate() vor hasErrors() aufrufen. Aber ich verstehe immer noch nicht, warum "grails generate-all" controller nicht validate() aufrufen muss, bevor hasErrors() verwendet wird?
Haben Sie vorher validate() aufgerufen? Können wir den ganzen Aktionscode haben? –
Und auch die Eigenschaften der Benutzerklasse. –
Ich rufe nur hasErrors() -Funktion, nicht validate(). Ja, ich werde die Frage bald aktualisieren. –