5

beforeDelete イベントを使用して、オブジェクトで Grails GORM 削除を統合テストしようとしています。問題は、統合テストで 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}"
  }

グレイルズ 1.3.5

助言がありますか?

なぜ私は気にするのですか?

私のテストは次の理由で失敗しています:

org.springframework.dao.InvalidDataAccessApiUsageException: 削除されたオブジェクトはカスケードによって再保存されます (関連付けから削除されたオブジェクトを削除します): [com.v.ChallengeMember#1]; ネストされた例外は org.hibernate.ObjectDeletedException です: 削除されたオブジェクトはカスケードによって再保存されます (関連付けから削除されたオブジェクトを削除します): [com.v.ChallengeMember#1]

ただし、 beforeDelete が起動されているため、削除はブラウザーから正常に機能します。

4

1 に答える 1

1

さて、withNewSessionでラップすると、起動します-

ChallengeMember.withNewSession {
   membership.delete(flush:true)
}
于 2010-12-08T14:55:09.990 に答える