grails - Grails 3.0.9和Geb测试空请求对象

标签 grails request functional-testing geb

根据用户请求,保存操作的行为是它将重定向到从中选择创建操作的任何页面。

在这种情况下,这是引荐来源网址。

问题是,当我尝试运行geb测试来测试此功能时,重定向不会发生,并且当我查看geb测试中的requestReferer()的值时,它是null,而geb测试中的request的值也是null

// Controller's save action
@Transactional
def save() {
    def baseUrl = baseUrl()

    params.createdBy = currentUser()
    params.contactEmail = userEmail()

    Item item = new Item( params )

    if ( params.group) {
        itemService.bindItemPropertyData( item, params )
    }

    if ( !item.validate() ) {
        if ( item.isSpecialConstraintViolation() ) {
            def duplicatedItemUrl = itemAssetService.getDuplicatedItemUrl( item.source, baseUrl )

            render view: 'create', model: [ item : item,
                                            map             : getListsForView(),
                                            duplicatedSource: duplicatedAssetUrl,
                                            referer         : params.referer,
                                            params          : params ]
        } else {
            render view: 'create', model: [ item: item,
                                            map           : getListsForView(),
                                            referer       : params.referer,
                                            params        : params ]
        }
    } else {
        if ( params.referer ) {
            item.save( flush: true )
            redirect( uri: params.referer )
        } else {
            item.save( flush: true )
            redirect( action: "show", id: item.id )
        }
    }
}

// requestReferer() method in controller
private String requestReferer() {
    return request.getHeader("referer")
}

// Geb login method
def logIn() {
    $("form").username = "user"
    $("form").password = "password"
    $("button").click()
}

// geb test in question
def "test creating an item"() {
    when: "logging in and creating an item"
        go '/'
        logIn()
        go '/item/create'
        $("form").name = "Item One"
        $("form").source = "Item One"
        $("button").click()

    then: "item was saved"
        $("title").text() == "Item Index"
}

最佳答案

问题的原因在于,在测试中,没有通过单击链接来请求创建 Action ,这导致未设置请求 header 。

解决方案是在更改通过的测试后,实际单击页面上的创建链接。

关于grails - Grails 3.0.9和Geb测试空请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222608/

相关文章:

grails - Grails-createCriteria返回javassist实例而不是特定域

hibernate - GORM 数据库中的随机对象

ruby-on-rails - 在 Rails 中,我如何测试在 Controller 中对模型实例所做的修改?

json - Grails 2.2 对需要请求 JSON 内容的远程 Web 服务的功能测试

unit-testing - Grails断言-验证断言在单元测试中是否失败

hibernate - 从 1.3.5 升级到 1.3.9 时如何修复 grails 配置错误?

java - Tomcat 请求因超时而取消

java - 根据jsp形式创建对象

c# - 与通用处理程序交互

sqlite - 尽管有设置,在内存中 sqlite 总是空的