3

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

以下是一些代码片段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也是空的,但它没有解决闪存问题。view和也存在同样的问题model

我错过了什么?任何帮助高度赞赏。

问候

乔纳斯

编辑:

这是一个奇怪的场景:

我的控制器具有以下内容:

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() 中没有

这个怎么可能????

问候

乔纳斯

4

1 回答 1

1

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

于 2011-11-21T09:33:20.910 回答