Grails Spock GORM возвращает пустой список

#grails #groovy #grails-orm #spock

#grails #groovy #grails-orm #спок

Вопрос:

Я создаю модульный тест с использованием grails GORM. Когда я вызываю метод list() для получения данных, список возвращается пустым. Вот код контроллера: println «entity = » Entity.get(1)

     println "list = " NotificationProfile.list().size()

    params.max = Math.min((params.max as Integer) ?: 10, 100)
    User user = User.get(springSecurityService.principal.id)

    println "user = " user
  

Профиль уведомлений.List().size возвращает 0
User.get(springSecurityService.principal.id ) возвращает значение null

Вот код спецификации:

 @Rollback
@TestFor(NotificationProfileController)
@Mock([NotificationProfile, Entity, User])
class NotificationProfileControllerSpec extends Specification {

def setup() {
}

def cleanup() {
}

void "list by system admin"() {

    when:
    controller.springSecurityService = [principal: [id: 5]]
    controller.list()

    then:
    view == '/notificationProfile/list'

  }
 }
  

Я буду рад, если смогу получить хороший возврат по размеру списка и ненулевому пользователю. Спасибо.

Ответ №1:

Когда вы выполняете модульный тест, Grails не использует ваши подключения к базе данных и, следовательно, для каждого модульного теста нет данных.

Чтобы заполнить вашу базу данных на время выполнения модульных тестов, вы должны добавить свои данные в свой метод setup() .

 def setup() {
    // make sure you are creating a new user with all the required fields    
    // otherwise GORM will throw validation error
    new User(username: "test", email:"test@test.com").save flush:true, failOnError:true
}
  

Комментарии:

1. Это сработало. Большое спасибо. Я думал, что во время тестов можно получить доступ к базе данных тестовой среды. Теперь я могу выполнять свои тесты. Большое спасибо!

Ответ №2:

Как насчет издевательства над springSecurityService

 import grails.plugin.springsecurity.SpringSecurityService
import grails.test.mixin.TestFor
import spock.lang.Specification
import spock.lang.Unroll

@TestFor(NotificationProfileController)
@Mock([NotificationProfile, Entity, User])
class NotificationProfileControllerSpec extends Specification {

    def springSecurityService

    def setup() {
        springSecurityService = Mock(SpringSecurityService)
        controller.springSecurityService = springSecurityService
    }

    void "list by system admin"() {
        given:
            User user = new User()
        when:
            controller.list()
        then:
            1 * springSecurityService.getPrincipal() >> user
        and:
            view == '/notificationProfile/list'
    }
}