Почему эта спецификация Спока в Граале, приводящая к «идентификатору экземпляра ProjectName.EVENT был изменен с 1 на 2;»?

StackOverflow https://stackoverflow.com/questions/4768172

Вопрос

Бег 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.Event был изменен с 1 на 2 на ProjectName.EventControllerspec.Save: событие (EventControllerSpec.Grovy: 74)

Вызванный: org.hibernate.hibernateException: Идентификатор экземпляра ProjectName.Event был изменен с 1 на 2

  1. Откуда эта проблема происходит?
  2. Как это может быть решено?
  3. Необязательно] может кто -нибудь создать тег "Спок"?

от EventControllerspec.grovy

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.lang.Specification или жеgrails.plugin.spock.IntegrationSpec скорее, чем grails.plugin.spock.ControllerSpec, который предназначен для модульных тестов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top