2010-12-08 49 views
4

Essais de test d'intégration Grails Suppression de GORM sur un objet avec l'événement beforeDelete. Le problème est que l'événement beforeDelete n'est pas tiré dans les tests d'intégration:Les événements GORM ne tirent pas dans les tests d'intégration

class ChallengeMembershipTests extends GroovyTestCase { 
    void testQuitChallenge() { 
     VUser user = VUser.build() 
     assertNotNull("user should be saved", user.id) 
     UserChallenge challenge = UserChallenge.build(owner: user) 
     assertNotNull("challenge should be saved", challenge.id) 

     ChallengeMember member = ChallengeMember.build(challenge: challenge) 
     println "MEMBER: ${member}" 
     assertNotNull("member should be saved", member.id) 
     member.delete(flush:true)   

    } 
} 

Partie pertinente ChallengeMember:

def beforeDelete = { 
     log.info "begin deleting challenge member ${this}" 
     user.removeFromChallenge_memberships(this) 
     challenge?.removeFromParticipants(this) 
     team?.removeFromMembers(this) 
     log.info "deleting challenge member ${this}" 
    } 

Grails 1.3.5

Toutes les suggestions?

Pourquoi est-ce que cela m'intéresse?

Mes tests échouent en raison de:

org.springframework.dao.InvalidDataAccessApiUsageException: objet supprimé sera à nouveau enregistré par cascade (supprimer objet supprimé des associations): [com.v.ChallengeMember # 1]; l'exception imbriquée est org.hibernate.ObjectDeletedException: l'objet supprimé sera réenregistré par cascade (supprimer l'objet supprimé des associations): [com.v.ChallengeMember # 1]

Mais, delete fonctionne correctement depuis un navigateur, car beforeDelete est en train d'être viré.

Répondre

1

Eh bien, si je l'envelopper dans un withNewSession il fires-

ChallengeMember.withNewSession { 
    membership.delete(flush:true) 
}