2013-05-09 53 views
1

我有一個域,其中有兩個字段可以爲空,但不能同時爲兩個。因此,像這樣Grails域驗證器:兩個字段可以爲空,但不能同時爲空

class Character { 
    Association association 
    String otherAssociation 
    static constraints = { 
     association (validator: {val, obj-> if (!val && !obj.otherAssociation) return 'league.association.mustbeone'}) 
     otherAssociation (validator: {val, obj-> if (!val && !obj.association) return 'league.association.mustbeone'}) 
    } 
} 

但是當我運行測試,如下面,我只能得到失敗

void testCreateWithAssociation() { 
    def assoc = new Association(name:'Fake Association').save() 
    def assoccha = new Character(association:assoc).save() 

    assert assoccha 
} 
void testCreateWithoutAssociation() { 
    def cha = new Character(otherAssociation:'Fake Association').save() 
    assert cha 
} 

我在做什麼錯?

編輯 它看起來像如果我打破了我的代碼弄成這個樣子:

def assoc = new Association(name:'Fake Association') 
assoc.save() 

,一切工作正常。但是現在我想知道爲什麼我不能在同一行中保存.save(),因爲我在其他測試中這樣做,並且它可以工作。

+0

你能肯定嗎?嘗試將.save()放回與之前相同的行。也許你的班級或其他代碼沒有被重新加載或者其他的改變。很難相信這個改變會影響測試用例。 – 2013-05-09 06:34:47

+0

如果域驗證失敗,'.save()'方法返回'false',並且如果域驗證通過,則返回域類。只是FYI – 2013-05-10 13:55:57

回答

4

爲了使您的測試通過,您的字段關聯和其他Association必須爲空。可空約束添加到這兩個,這樣的:

static constraints = { 
    association nullable: true, validator: {val, obj-> if (!val && !obj.otherAssociation) return 'league.association.mustbeone'} 
    otherAssociation nullable: true, validator: {val, obj-> if (!val && !obj.association) return 'league.association.mustbeone'} 
} 

我想它和它的作品

相關問題