#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'
}
}