Grails Spring Security登录控制器测试

时间:2019-01-07 03:38:31

标签: unit-testing grails spring-security

我的登录控制器中包含以下代码,并且必须测试用户是否已登录。我将如何编写测试用例?

def index() {
    if (springSecurityService.isLoggedIn()) {
        redirect uri: '/'
    }
    else {
        redirect action: 'auth', params: params
    }
}

2 个答案:

答案 0 :(得分:1)

类似这样的东西:

import grails.plugin.springsecurity.SpringSecurityService
import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(YourController)
class YourControllerSpec extends Specification {

    def springSecurityService = Mock( SpringSecurityService )

    void setup() {
        controller.springSecurityService = springSecurityService
    }

    void "test index"() {
        when:
            controller.index()
        then:
            1 * springSecurityService.isLoggedIn() >> true
            response.redirectedUrl == '/'
        when:
            controller.response.reset()
            controller.index()
        then:
            1 * springSecurityService.isLoggedIn() >> false
            response.redirectedUrl == '/auth'
    }
}

答案 1 :(得分:0)

您可以在此处(https://github.com/orubel/beapi_backend/blob/master/src/integration-test/groovy/net/nosegrind/apiframework/ApiFunctionalSpec.groovy)看到Beapi API Framework实现如何处理那里的测试。

第一个测试是测试登录(使用YML文件中的默认root登录/传递),然后保存令牌以供其他测试使用。