【问题标题】:Grails 2.0: Issue testing flash.messageGrails 2.0:问题测试 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 是否有效?

标签: unit-testing grails controller grails-2.0


【解决方案1】:

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

【讨论】:

  • 不是这个原因,验证没有失败。即使我在 else 块中将消息分配给 flash.message,我也会遇到同样的问题。
猜你喜欢
  • 2011-08-14
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多