【问题标题】:Grails 2.0: MissingPropertyException when setting attribute on SessionGrails 2.0:在 Session 上设置属性时出现 MissingPropertyException
【发布时间】:2012-01-26 13:30:39
【问题描述】:

自从从 2.0.0.RC1 升级到 Grails 2.0.0 后,在我的控制器中设置会话的用户属性时出现了一些非常奇怪的行为。

我的测试正在集成中,当运行 grails --integration test-app 或从 IDE 运行时,所有测试都通过,但是当运行 grails test-app 先进行单元测试时,它会失败。

我只是在我的 UserController.login() 操作中设置会话中的用户:

session.user = user

我的测试是这样的:

params.userName = testUser1.userName  // some user domain instance
params.password = testUser1.password
controller.doLogin()
assert null != session.user

在运行grails test-app 时,我在session.user=user 行收到以下错误:

groovy.lang.MissingPropertyException: No such property: user for class: org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession
Possible solutions: new

将控制器代码替换为以下作品:

session.setAttribute('user',user)

和测试:

assert null != session.getAttribute('user')

如上所述,这只发生在运行完整的测试套件时。如果运行--integration 很好。 run-app也可以。

一个错误?

问候

乔纳斯

【问题讨论】:

    标签: unit-testing session grails controller


    【解决方案1】:

    我也有同样的问题。我正在使用 Grails 2.0.1

    我注意到的一件事是,失败的测试使用 metaClass 进行了一些设置,例如:

    controller.metaClass.message = {args -> "mockMessage"}
    

    删除该行后,测试将通过访问会话属性的部分运行。但是当到达调用 message() 的点时测试将不起作用

    【讨论】:

    • 您是否有机会在需要时使用controller.metaClass.message = null 删除元类,然后在您的操作顺序需要时将其放回原处?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多