2011-11-21 79 views
3

我有一个针对我的UserController的单元测试,但自从升级到Grails 2.0后,flash变量总是返回一个没有消息的静态映射。Grails 2.0:发布测试flash.message

这里有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为weill,但没有解决闪存问题。 viewmodel也存在同样的问题。

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

问候

乔纳斯

编辑:

这里有一个奇怪的场景:

我的控制器有以下几点:

def test = { 
    flash.message = "Message" 
} 

def save = { 
    flash.message = "Message" 
} 

我的测试看起来像这样:

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

这样的输出:

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

有趣提也是在的IntelliJ调试器在断点测试()作用,但不能在保存()

如何停止那可以吗?

问候

乔纳斯

+0

它使用grails 1.3.7吗? – fixitagain

回答

1

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

+0

这不是原因,验证不会失败。即使我给else块中的flash.message分配一条消息,也会遇到同样的问题。 – Jonas

+0

你在使用脚手架吗? – fixitagain