Почему я получаю «Нет такого свойства» в логике классов до и после * в модульных тестах? - PullRequest
1 голос
/ 04 мая 2011

Я заметил, что любая ссылка на свойство отсутствует, когда требуются классы домена в модульных тестах Grails.

Где-то в модульном тесте

mockDomain(Event)

10.times {
    e   = new Event(eventCalendar:ec, title:"$ec - Event $it", details:"some detail", location:"some location", startDate: now, endDate: now+1)
    e.save()
}

Event.groovy

static beforeInsert = {
    if (!endDate) {
        // do something about it
    }
}

Результирующая ошибка

No such property: endDate for class: myproj.Event Possible solutions: endDate

groovy.lang.MissingPropertyException: No such property: endDate for class: myproj.Event
Possible solutions: endDate
    at myproj.Event$__clinit__closure5.doCall(Event.groovy:74)
    at myproj.Event$__clinit__closure5.doCall(Event.groovy)
    at grails.test.MockUtils.triggerEvent(MockUtils.groovy:724)
    at grails.test.MockUtils$_addDynamicInstanceMethods_closure68.doCall(MockUtils.groovy:752)
    at grails.test.MockUtils$_addDynamicInstanceMethods_closure68.doCall(MockUtils.groovy)
    at myproj.EventCalendarTest$_testCreateAndDeleteCalendarWithEvents_closure1.doCall(EventCalendarTest.groovy:43)
    at myproj.EventCalendarTest.testCreateAndDeleteCalendarWithEvents(EventCalendarTest.groovy:40)
  1. Как мне все еще создать рабочий тест?
  2. Почему трассировка стека предлагает свойство, которое было указано как отсутствующее?

1 Ответ

2 голосов
/ 04 мая 2011

Вы неправильно определили свой обработчик событий как статическое замыкание:

static beforeInsert = {
    if (!endDate) {
        // do something about it
    }
}

Вы не можете получить доступ к endDate здесь, потому что это (предположительно) нестатическое свойство.Измените ваш обработчик событий, чтобы он не был статичным, и ваша проблема должна быть исправлена.

def beforeInsert = {
    if (!endDate) {
        // do something about it
    }
}
...