以下是我的beforeInterceptor

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

我不知道如何编写beforeInterceptor的测试。我已经用谷歌搜索了,但是没有运气。我有tried自己编写其测试用例,但无法在beforeInterceptor中获得actionName
when:
    controller.beforeInterceptor()

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

每次我在actionName中获取null时。

有人知道吗:如何编写beforeInterceptor (integrationunit)的测试用例?

最佳答案

我为此创建了单元测试,我们可以在其中设置请求中的 Action 名称。我直接调用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'
  }
}

09-03 21:43