【问题标题】:Override Grails dateCreated and lastUpdated for test data only?仅针对测试数据覆盖 Grails dateCreated 和 lastUpdated?
【发布时间】:2012-11-11 01:28:08
【问题描述】:

我有几个 Grails 2.1 域类,包括 GORM 自动管理的 dateCreatedlastUpdated 字段,例如:

class Person {
    Date dateCreated
    Date lastUpdated
    String name
}

想要 Grails 在运行时自动填写这些字段,但我想要创建一些测试数据,我可以在其中手动定义这些日期的值。问题在于,如果这些字段带有拦截器,即使我专门设置了它们,Grails 也会自动设置这些值。

我见过this SO question,它描述了如何允许更改dateCreated,但我也需要更改lastUpdated。这可能吗?

【问题讨论】:

  • 您是否尝试过使用其他方法?我认为它不起作用?
  • @tim_yates,问题中链接的方法允许我手动设置dateCreated 字段,但不能手动设置lastUpdated 字段。
  • 你测试了吗?它似乎禁用了所有时间戳,因此包含 lastUpdated。
  • @DanVinton 你得到什么错误?还是像往常一样设置lastUpdated 字段?

标签: grails groovy grails-orm grails-2.0 grails-domain-class


【解决方案1】:

哎呀,我的错误,另一个问题中的方法确实有效,但是有问题的实体被单独保存在其他地方。您似乎还需要一个明确的flush 才能使事情正常进行:

def withAutoTimestampSuppression(entity, closure) {
    toggleAutoTimestamp(entity, false)
    def result = closure()
    toggleAutoTimestamp(entity, true)
    result
}

def toggleAutoTimestamp(target, enabled) {
    def applicationContext = (ServletContextHolder.getServletContext()                                                           
                              .getAttribute(ApplicationAttributes.APPLICATION_CONTEXT))

    def closureInterceptor = applicationContext.getBean("eventTriggeringInterceptor")
    def datastore = closureInterceptor.datastores.values().iterator().next()
    def interceptor = datastore.getEventTriggeringInterceptor()

    def listener = interceptor.findEventListener(target)
    listener.shouldTimestamp = enabled
    null
}

def createTestPerson() {

    def luke = new Person(name: "Luke Skywalker")
    withAutoTimestampSuppression(luke) {

        def lastWeek = new Date().minus(7)
        luke.dateCreated = lastWeek
        luke.lastUpdated = lastWeek
        luke.save(failOnError: true, flush: true)
    }
}

【讨论】:

    【解决方案2】:

    如果是集成测试可以使用hql update语句手动设置lastUpdated。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2012-02-21
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      相关资源
      最近更新 更多