События GORM не запускаются в интеграционных тестах - PullRequest
4 голосов
/ 08 декабря 2010

Попытка интеграции теста Grails GORM на объекте с событием beforeDelete.Проблема в том, что событие beforeDelete не запускается в интеграционных тестах:

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)        

  }
}

Соответствующая часть 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

Есть предложения?

Почему меня это волнует?

Мои тесты не пройдены из-за:

org.springframework.dao.InvalidDataAccessApiUsageException: удаленный объект будет повторно сохранен каскадом (удалить удаленныйобъект из ассоциаций): [com.v.ChallengeMember # 1];Вложенное исключение - org.hibernate.ObjectDeletedException: удаленный объект будет повторно сохранен каскадом (удалить удаленный объект из ассоциаций): [com.v.ChallengeMember # 1]

Но удаление отлично работает из браузера,потому что beforeDelete увольняется.

1 Ответ

1 голос
/ 08 декабря 2010

Хорошо, если я заверну в NewSession, он сработает -

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