簡體   English   中英

為什么在Grails中的此Spock規范會導致“ projectname.Event的實例的標識符從1更改為2;”?

[英]Why is this Spock Specification in Grails resulting in 'identifier of an instance of projectname.Event was altered from 1 to 2;'?

運行test-app integration:spock會導致以下錯誤:

projectname.Event實例的標識符從1更改為2; 嵌套的異常是org.hibernate.HibernateException :projectname.Event的實例的標識符從1更改為2

org.springframework.orm.hibernate3.HibernateSystemException :projectname.Event實例的標識符從1更改為2;

嵌套異常是org.hibernate.HibernateException :projectname實例的標識符。事件在projectname處從1更改為2. EventControllerSpec.save:一個事件(EventControllerSpec.groovy:74)

由以下原因引起: org.hibernate.HibernateException :projectname.Event實例的標識符從1更改為2

  1. 這個問題源於何處?
  2. 如何解決?
  3. [可選]有人可以創建標簽“ spock ”嗎?

來自EventControllerSpec.groovy

def "save: an event"() {
    given: "Constraint-conform event properties"
    def eventTitle              = "Being in Beijing"
    controller.params.title     = eventTitle
    controller.params.details   = "Details"
    controller.params.location  = "Beijing"
    controller.params.startDate = "01.09.2030"
    controller.params.startTime = "20:15"
    controller.params.endDate   = "01.09.2030"
    controller.params.endTime   = "21:45"
    controller.params.publisher = getUserObject("someuser")

    when: "I save that event"
    def result = controller.save() // THIS IS LINE #74 AS STATED IN THE ERROR

    then: "The event is successfully saved and the show-view rendered"
    controller.flash.message.args.grep(eventTitle)
    redirectArgs.action             == "show"
    redirectArgs.id                 == result.eventInstance.id
}

private User getUserObject(String name) {
    def user = User.findByUsername(name)

    if (!user) {
        user = new User()
        user.username = name
        user.email = "${name}@example.com"
        user.pw = "barbar"
        user.pwConfirmation = "barbar"
        assert user.save()
    }

    user
}

來自EventController.groovy

def save = {
    def eventInstance = new Event()

    eventInstance.title     = params.title
    eventInstance.details   = params.details
    eventInstance.location  = params.location
    eventInstance.startDate = DateUtil.createDate(params.startDate, params.startTime)
    eventInstance.endDate   = DateUtil.createDate(params.endDate, params.endTime)
    eventInstance.publisher = session.user

    if (eventInstance.save(flush: true)) {
        flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.title])}"
        redirect(action: "show", id: eventInstance.id)
    }
    else {
        eventInstance.errors.each { log.warn it }
        render(view: "add", model: [eventInstance: eventInstance])
    }
}

您的Spock測試會擴展到什么課程? 它應該是spock.lang.Specificationgrails.plugin.spock.IntegrationSpec而不是grails.plugin.spock.ControllerSpec ,后者是為單元測試而設計的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM