【问题标题】:Grails session object property is not being set during integration test在集成测试期间未设置 Grails 会话对象属性
【发布时间】:2013-04-18 21:03:38
【问题描述】:

我正在尝试在 Grails 2.2.1 中测试一个过滤器,只要有人在我的应用程序中点击任何 URL,它就会在全局 session 对象中存储一个值。这是我想出的,感谢this fine post

package drummer

class SessionExpirationFilters {

    def filters = {
        all(controller: '*', action: '*') {
            before = {
                session.foo = 'bar'
            }
        }
    }
}

我可以通过在控制器方法中输出session.foo 看到过滤器工作,但集成测试失败:

package drummer

import grails.plugin.spock.IntegrationSpec

class QuestionControllerIntegrationSpec extends IntegrationSpec {

    def 'filter sets session foo to bar'() {
        given:
        def controller = new QuestionController()

        when:
        controller.list()

        then:
        assert 'bar' == controller.session.foo // fails, session.foo is null
    }
}

那么为什么集成测试中没有设置“foo”会话对象属性?

【问题讨论】:

标签: session grails spock


【解决方案1】:

不调用它的原因是过滤器不会在控制器测试中自动运行。如果您的过滤器在服务/实用程序中,您可以为此编写单独的测试。

如果您想直接测试您的过滤器,Luke Daley 在这里写了一篇关于为 filters 创建集成测试的博文:

import grails.util.GrailsWebUtil

class MyFilterTests extends GroovyTestCase {
    def filterInterceptor
    def grailsApplication
    def grailsWebRequest

    def request(Map params, controllerName, actionName) {
        grailsWebRequest = GrailsWebUtil.bindMockWebRequest(grailsApplication.mainContext)
        grailsWebRequest.params.putAll(params)
        grailsWebRequest.controllerName = controllerName
        grailsWebRequest.actionName = actionName
        filterInterceptor.preHandle(grailsWebRequest.request, grailsWebRequest.response, null)
    }

    def getResponse() {
        grailsWebRequest.currentResponse
    }

    def testFilterRedirects() {
        def result = request("home", "index", someParameter: "2")
        assertFalse result
        assertTrue response.redirectedUrl.endsWith(/* something */)
    }    
}

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多