Grails 2.0:发布测试flash.message

时间:2011-11-21 07:06:17

标签: unit-testing grails controller grails-2.0

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

以下是UserControllerTests的一些代码段:

@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()

中停止。

怎么可能是????

此致

纳斯

1 个答案:

答案 0 :(得分:1)

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