Вопрос

Ниже приводится мой beforeInterceptor

def beforeInterceptor = {
    log.debug "============${actionName}=========="       
    if (!(actionName in ['search'])) {
        redirect controller: 'error', action: 'denied'
        return false
    }
}

Я понятия не имею, как написать тест beforeInterceptor.Я искал это в Google, но безуспешно.У меня есть tried написать свои тестовые примеры самостоятельно, но не смог получить actionName в beforeInterceptor.

when:
    controller.beforeInterceptor()

или

when:
    controller.beforeInterceptor.call()
    controller.history(ticket)

Каждый раз, когда я получал ноль actionName.

У кого-нибудь есть идеи: как писать тестовые примеры beforeInterceptor (integration или unit)?

Это было полезно?

Решение

Для этого я создал модульный тест, мы можем указать там имя действия в запросе.И я вызвал beforeInterceptor напрямую, например:

@TestFor(PersonController)
@Mock([Person])
class PersonControllerSpec extends Specification {

  def setup() {
  }

  def cleanup() {
  }

  void "test beforeInterceptor"() {
    when:
    webRequest.actionName = "index"
    controller.beforeInterceptor()

    then:
    controller.response.redirectedUrl == '/error/denied'

    when:
    controller.response.reset()
    webRequest.actionName = "search"
    controller.beforeInterceptor()

    then:
    controller.response.redirectedUrl != '/error/denied'
  }
}

Другие советы

Grails не вызывает перехватчиков или сервл -фильтров при вызове действий во время тестирования интеграции.Вы должны проверить перехватчики и фильтры в изоляции, используя функциональное тестирование, если это необходимо.

будет легче использовать и тестировать с помощью фильтр вместо.

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