Grails 2.0:问题测试 flash.message

Posted

技术标签:

【中文标题】Grails 2.0:问题测试 flash.message【英文标题】:Grails 2.0: Issue testing flash.message 【发布时间】:2012-01-02 17:56:07 【问题描述】:

我对我的UserController 进行了单元测试,但自从升级到 Grails 2.0 后,flash 变量似乎总是返回一个没有消息的空映射。

这里是UserControllerTests的一些代码sn-ps:

@TestFor(UserController)
@Mock(User)
class UserControllerTests 
...
  void testSaveSucceeds() 
  params.userName = 'Joe'
  ...
  controller.save()
  assert null != flash.message
  assert '/user/list' == response.redirectedUrl
  

UserController:

def save = 
  def userInstance = new User(params)
  if (userInstance.validate()) 
    flash.message = message(code: 'default.created.message', args: [userInstance.userName ])
    ...

但是我的测试结果如下:

assert null != flash.message
            |  |     |
            |  [:]   null
            false

我也尝试过作为集成测试,否则response 也会为空,但它并没有解决闪存问题。 viewmodel 也存在同样的问题。

我错过了什么?任何帮助都非常感谢。

问候

乔纳斯

编辑:

这是一个奇怪的场景:

我的控制器有以下内容:

def test = 
   flash.message = "Message"


def save = 
   flash.message = "Message"

我的测试看起来像这样:

void testSaveSucceeds() 
   controller.save()
   println ">>> $flash"
   controller.test()
   println ">>> $flash"

这样的输出:

>>> [:]
>>> [message:Message]

有趣的是,IntelliJ 中的调试器在 test() 操作中的断点处停止,但在 save() 中没有停止

怎么会这样????

问候

乔纳斯

【问题讨论】:

使用 grails 1.3.7 是否有效? 【参考方案1】:

对我来说,这意味着userInstance.validate() 返回false 即验证失败。

【讨论】:

不是这个原因,验证没有失败。即使我在 else 块中将消息分配给 flash.message,我也会遇到同样的问题。

以上是关于Grails 2.0:问题测试 flash.message的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grails 2.0 服务中对 i18n 注入 messageSource 的使用进行单元或集成测试

grails 2.0 - 正确使用 serverURL 进行生产?

Grails 2.0 的性能真的那么低吗?

用于 Grails 2.0 的 Grails/Gradle 插件

我应该在 grails 2.0 中使用哪个贝宝/支付插件?

Grails 2.0:无效的 SHA1