首页 > 解决方案 > Grails Geb 功能测试,setupData() 方法,正在创建和回滚数据,但未渲染

问题描述

我一直在关注这里的文档,特别是第 15.2 节。我对本文档的理解是,在每次测试提供以下导入和注释后,集成测试会自动回滚

import grails.testing.mixin.integration.Integration
import grails.gorm.transactions.*
import spock.lang.*

@Integration
@Rollback

并且还假设从测试方法中调用 setupData() 方法,因为只有测试中的操作会被回滚。我的测试课看起来像这样

package com.something.DashboardTest

import com.something.User

import geb.spock.GebSpec
import grails.testing.mixin.integration.Integration
import grails.gorm.transactions.*
import grails.transaction.*

import com.something.pages.DashboardPage

@Integration
@Rollback
class DashboardSpec extends GebSpec {

    void setupData() {
        User testUser = new User(
                fName: "Finn",
                lName: "Murtons",
                email: "finn@gmail.com",

        )
        assert testUser.validate() == true
        testUser.save()
    }

    def cleanup() {
    }


    void "when the test is executed..."() {
        when:
        setupData()

        and:
        to DashboardPage

        then:
        at DashboardPage
        assert User.getUserByEmail("finn@gmail.com").fName == "Finn" 
        assert $("h1.greeting$userId", 0).text() == "Hello Finn Murtons"
    }
}

根据文档,如果 setupData() 方法是从测试方法中调用的。那么它应该在测试后回滚。在这种情况下,正在创建用户,并且我确定因为第二个断言语句正在通过,所以测试仅在最后一行失败。但是由于某种原因,用户数据的渲染失败

当我将它从 void setupData() 更改为 void setup() 时,测试通过了,但事务当然不会回滚。这是使用 void setupData() 方法失败时测试的错误报告的样子

$("h1.greeting").text() == "Up match test"
|         |        |     |
[]       400       null false

我正在使用 Grails 3.3.9 这只是对实际问题的简化表示,出于专业原因,我无法分享完整的代码。

标签: grailsautomated-testsgrails-ormspockgeb

解决方案


推荐阅读