Проблемы с написанием супер простого теста в Grails - PullRequest
0 голосов
/ 30 мая 2018

У меня есть класс домена User:

class User extends AuditableEntity {

    private static final long serialVersionUID = 1

    String username
    String password
    String email
    String googleId
    String linkedinId
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    Set<Role> getAuthorities() {
        (UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
    }

    static constraints = {
        password nullable: true, blank: true, password: true
        username nullable: false, blank: false, unique: true
        email nullable: false, blank: false, unique: true
        googleId nullable: true, blank: true, unique: true
        linkedinId nullable: true, blank: true, unique: true
    }

    static mapping = {
        password column: '`password`'
        googleId column: 'google_id'
        linkedinId column: 'linkedin_id'
    }

    static namedQueries = {
        notDeleted {
            isNull 'deletedAt'
        }
    }
}

Где AuditableEntity имеет только пустые поля.

У меня также есть простой класс обслуживания UserService:

@Transactional
class UserService {

    @Transactional(readOnly = true)
    User getByGoogleId(String googleId) {
        def user = User.notDeleted.findByGoogleId(googleId)

        user
    }
}

Я пытаюсь написать модульный тест для класса обслуживания во время проверки домена пользователя:

class UserServiceSpec extends Specification implements ServiceUnitTest<UserService>, DataTest {

    def setupSpec() {
        mockDomain User
    }

    void "getByGoogleId"() {
        setup:
        new User(
                username: "username",
                googleId: "googleId",
                email: "user@domain.com",
                enabled: true,
                accountExpired: false,
                accountLocked: false,
                passwordExpired: false
        ).save(failOnError: true)

        when:
        def user = service.getByGoogleId("googleId")

        then:
        User.count() == 1
        user.username == "username"
    }
}

Этот тест не пройден, поскольку по какой-то причине он не создает объект пользователя.User.count() равно 0. Это не проблема проверки, так как нет ошибок проверки домена (они были раньше).

Что я делаю не так?

1 Ответ

0 голосов
/ 30 мая 2018

Попробуйте добавить флэш при создании домена:

...
new User(
    username: "username",
    googleId: "googleId",
    email: "user@domain.com",
    enabled: true,
    accountExpired: false,
    accountLocked: false,
    passwordExpired: false
    ).save(failOnError: true, flush: true)
...

Я имитировал ваши настройки, и это все, что требовалось.

...