Я следовал документации здесь , в частности, раздел 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 () вызывается из метода теста. затем он должен быть откатан после теста. В этом случае пользователь создается, и я уверен, потому что второй последний оператор assert проходит, тест не проходит только в последней строке. Но рендеринг пользовательских данных по какой-то причине завершается неудачно
Когда я изменяю их с void setupData () на void setup (), тест проходит, но, конечно, транзакции не откатываются. Вот как выглядит отчет об ошибке для теста, когда он терпит неудачу при использовании подхода void setupData ()
$("h1.greeting").text() == "Up match test"
| | | |
[] 400 null false
Я использую Grails 3.3.9 Это просто упрощенное представление фактической проблемы, я не могу поделиться полным кодом по профессиональным причинам.