Тестовые примеры beforeInterceptor
-
21-12-2019 - |
Вопрос
Ниже приводится мой 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 не вызывает перехватчиков или сервл -фильтров при вызове действий во время тестирования интеграции.Вы должны проверить перехватчики и фильтры в изоляции, используя функциональное тестирование, если это необходимо.
будет легче использовать и тестировать с помощью фильтр вместо.