2015-03-20 9 views
2

У меня есть ситуация в контроллере, где я окружаю фрагменты кода в блоках if(Environment.Current == Environment.PRODUCTION), потому что блок кода вызывает methodA в restService, что делает вызов REST только для URL-адреса когда приложение развертывается на конкретном производственном сервере. Однако это означает, что область кода недостижима при выполнении тестов, что делает меня немного неудобным.Grails inject Service in Controller в зависимости от среды

В условиях развития я не озабочен сделать вызов methodA, как я гася что methodA бы вернуться и передать его к следующему контроллеру, поэтому изменение, если заявление if(Environment.Current != Environment.DEVELOPMENT) позволяет мне проверить код лучше и не нужно совершать звонки в места, недоступные во время dev.

В идеале, хотя я хотел бы попробовать и ввести Сервис в контроллер, зависящий от окружения grails; так что я мог бы иметь две услуги, как это:

class RestService { 
    def methodA() { 
    // go do a REST call 
    } 
} 

и

class FakeRestService() { 
    def methodA() { 
    // return some stubbed response 
    } 
} 

и в моем контроллере restService будет экземпляром FakeRestService в средах разработки и тестирования, а экземпляр RestService в ПРОИЗВОДСТВЕ

class SearchController { 
    def restService 

    def index() { 
    restService.methodA() 
    } 

Я немного озадачен тем, как я мог достичь этого в стиле «Грайли»/Весна. Я занимаюсь созданием какой-либо службы Factory, которая вернет экземпляр либо RestService, либо FakeRestService в зависимости от среды, но было бы неплохо, если бы я мог определить, какую услугу вводить в restService в config или что-то подобное.

Любые советы были бы замечательными!

ответ

3

Вы можете добавить псевдоним для имени bean-компонента в resources.groovy, когда среда TEST.

import grails.util.Environment 

beans = { 
    if (Environment.current == Environment.TEST) { 
     springConfig.addAlias 'restService', 'fakeRestService' 
    } 
} 

RuntimeSpringConfiguration доступен в resources.groovy по getSpringConfig().

+0

Великий элегантное решение этой проблемы. Благодаря!! – SteWoo

0

Вот более Grails-й вариант ответа dmahapatro в:

import grails.util.Environment 

beans = { 
    Environment.executeForCurrentEnvironment { 
     environments { 
      development { 
       springConfig.addAlias 'restService', 'fakeRestService' 
      } 
     } 
    } 
} 
Смежные вопросы