私はここの指示に従いました:http ://www.grails.org/doc/latest/guide/7.%20Validation.html
config.groovyに追加:
grails.validateable.classes = [liningtest.Warm']
次に、src / groovy / Warm.groovyに追加されます(これは非永続的なドメインクラスです)。
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)
}
}
ただし、「hasErrors」関数では機能しません(「空白false」と「サイズ:0..25」の両方)。名前が25より大きい場合でも、常にfalseを返します。
これはGrailsのバグですか?はいの場合、回避策はありますか?
Grails1.3.3を使用しています
更新:簡略化されたコードを更新しました。そして今、私は制約「サイズ」が「空白」と一緒に使用できないことを知っていますが、それでも機能しません。
test / unit/ヴライニングテスト/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)
}
}
そして私が得たエラー:
<?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>
更新2:単体テストを使用せずに、コントローラーでhasErrorsを呼び出そうとすると、実行されますが、false値が返されます。(hasErrorsはWarm('Hihi'、3)でfalseを返します)。誰かが手がかりを持っていますか?
更新3:私はVictorの方法に従いましたが、hasErrors()の前にvalidate()を呼び出すと、問題は解決します。しかし、私はまだ理解していません。なぜ「grailsgenerate-all」コントローラーはhasErrors()を使用する前にvalidate()を呼び出す必要がないのですか?