Методы динамического поиска Grails для классов доменов, не видимых в проектах плагинов - PullRequest
2 голосов
/ 02 января 2012

Моя среда разработки выглядит следующим образом:

Версия Grails: 1.3.7. РЕЛИЗ

Выполните следующие действия:

  1. mkdir GrailsProjects
  2. cd GrailsProjects
  3. grails create-plugin grails-domain
  4. cd grails-domain
  5. grails create-domain-class Book
  6. cd ..
  7. grails create-plugin grails-service
  8. cd grails-service
  9. grails create-service BookService
  10. Добавить

    grails.plugin.location."grails-domain" = "../grails-domain"
    

    вверху файла BuildConfig.groovy в проекте grails-service

  11. Используя текстовый редактор, измените содержимое файла Book.groovy на:

    package grails.domain
    
    class Book {
        String name
    
        static constraints = {
        }
    }
    
  12. Измените содержимое файла BookService.groovy на:

    package grails.service
    
    import grails.domain.Book
    
    class BookService {
        static transactional = true
    
        def someMethod() {
            def book = Book.findByName("Fooled by randomness")
        }
    }
    

При попытке вызвать метод BookService.someMethod, Grails не может найти метод findByName в Book. Book.name виден внутри BookService.someMethod, что означает, что проект плагина grails-service может разрешить код в проекте плагина grails-domain.

Шаги в точности такие, как указано выше; дополнительные действия не выполнялись.

Это ожидаемое поведение с проектами плагинов Grails? Есть ли другой способ разделить домены и классы обслуживания с Grails?

1 Ответ

1 голос
/ 03 января 2012

Спасибо, @David.Я не достиг точки, где плагины были интегрированы с веб-приложением, поэтому я не тестировал контроллеры.Я просто пытался проверить концепцию плагинов с помощью модульных тестов.Я вызывал BookService.someMethod из BookServiceTests, который был создан автоматически при создании службы.

Я обнаружил, что доменные классы необходимо проверять во время модульного тестирования, чтобы получить все функции GORM, включаядинамические искатели.Я добавил mockDomain(Book, []) к BookServiceTests.setUp, чтобы заставить модульные тесты работать.

У меня сейчас все отлично.

...