grails - 在Grails集成测试中将对象放在请求上

标签 grails grails-controller

在一个我正在看的Grails项目中,一个过滤器将Domain对象放在请求上...

class TokenFilters {

    def filters = {

        all( uri: '/hiphop/**' ) {

            before = {
                MyToken myToken = ...
                request.myToken = myToken

MyToken看起来像:
class MyToken {
    String id
    String token
    static mapping = {
        token( index:  true )
        id( generator: 'uuid' )
    }
    ...
 }

在我的 Controller 中,myToken被拉出请求。
MyController {
    myaction {
        MyToken accessToken = request.myToken

一切都很好。我希望为 Controller 编写一个集成测试。
@Test
void testLogin() {
    def mc = new MyController()    
    def myToken = new MyToken(1234);
    // set the request parameters
    mc.request.parameters = [myToken:myToken];
    def message = mc.action();
    assertTrue(message.indexOf("trans") > 0)

}

运行此命令时,我得到:
Failure:  testLogin(MyTests)
|  java.lang.IllegalArgumentException: Parameter map value must be single value  or array of type [java.lang.String]
    at testLogin(MyTests.groovy:40)

因此,看起来Grails只允许我使用String或单个值,而不喜欢我将对象放在Filter中的请求上。即使您也可以让我在“过滤器”中放置相同的对象类型。

我真的很想在不进行功能测试的情况下进行测试。请帮忙。我正在使用Grails 2.2.1

谢谢

最佳答案

问题在于您的代码正在将参数传递给 Controller ​​。模拟无法处理对象的HTTP请求。您可以做的是:

mc.request.parameters = [myToken: '1234']

然后您是 Controller /过滤器,请拉出1234并查找MyToken。如果您正在测试 Controller 转发,则可以将对象放入请求中。并非相反。

现在,我看到问题的一部分是,您正在尝试测试一个假设数据来自过滤器的 Controller 。

您已经省略了一些代码,但是假设您要扩展ControllerUnitTestCase,则可以访问模拟请求对象。您应该能够简单地做到:
@Test
void testLogin() {
    def mc = new MyController()    
    def myToken = new MyToken(1234);
    // set the request parameters
    request.myToken = myToken
    def message = mc.action();
    assertTrue(message.indexOf("trans") > 0)
}

关于grails - 在Grails集成测试中将对象放在请求上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421141/

相关文章:

tomcat - Groovy Redis 插件超时问题

grails - Paypal 不在沙盒中发送 IP 通知

grails - Grails将问卷调查数据映射到bean

grails - Grails域 transient 和计算

grails - Grails-自定义Flash.message渲染

Grails <g :set> tag not executed inside custom tag

hibernate - 使用AbstractPersistenceEventListener进行透明加密

spring - Groovy/Grails验证和hasFieldErrors问题

ajax - 使用Ajax在 Controller 上调用方法时,如何避免 thymeleaf 模板不存在?

exception - 使用View-Controller-Service体系结构在Grails中运行时错误处理