2011-03-23 3 views
2

Я пытаюсь правильно определить структуру дерева в GORM и проблема.Создание древовидной структуры в GORM

я один объект домена:

class Navigation { 
    Navigation parent 
    List children; 
    String name; 

    static belongsTo = [parent: Navigation] 
    static hasMany = [children: Navigation] 

    static constraints = { 
     parent(nullable: true); 
    } 
} 

и тест:

void testTree() { 
    Navigation root = new Navigation(name:"root"); 
    Navigation top1 = new Navigation(name:"home"); 
    Navigation top2 = new Navigation(name:"services"); 

    root.addToChildren(top1).addToChildren(top2).save(flush: true); 

    Navigation s1 = new Navigation(name:"plumbing") 
    Navigation s2 = new Navigation(name:"baking") 

    top2.addToChildren(s1).addToChildren(s2).save(flush: true); 

    Navigation t = Navigation.findByName("root") 
    assert t.children.size() == 2 
} 

если я запустить этот тест, я получаю эту ошибку:

org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: grails.Navigation.addToChildren() is applicable for argument types: (grails.Navigation) values: [grails.Navigation : null] 

и если я место содержимое этого теста в boostrap, i dont получите эту ошибку, а ap за исключением таблицы пуста

Что я могу сделать, чтобы исправить это?

+0

Я считаю, вы хотите использовать 'mappedBy': http://grails.org/doc/latest/ref/Domain%20Classes/ mappedBy.html –

ответ

2

Вам нужно высмеять домен навигации, чтобы вы могли использовать методы GORM в своем модульном тесте.

Добавить это в верхней части теста:

mockDomain(Navigation) 
+0

Я не знаю, почему ваша таблица навигации пуста, если вы поместили код в Bootstrap, но я думаю, что это ошибка в вашем коде Bootstrap. Я проверил, что этот тест - это не просто «тестирование домена издевательского кода», сделав его интеграционным тестом и удалив вызов mockDomain(). Он все еще проходит. Скорее всего, ваша навигационная таблица пуста после Bootstrap, потому что домен не успешно сохранил. Добавьте [failOnError: true] (http://stackoverflow.com/questions/5355329/what-is-the-best-way-to-debug-bootstrap-groovy/5357760#5357760) в ваш Bootstrap, чтобы сохранить как проверку работоспособности. – Dana

+0

Вы правы, сэр, в моем ботстрап-коде была проблема, что-то важное не удалось сохранить и вызвало все неудачу – mkoryak

Смежные вопросы