Grails 3.x - Создание тестовых данных для функциональных тестов - PullRequest
0 голосов
/ 15 января 2019

У меня есть приложение Grails, которое контролирует доступ, защищенный Spring Security. Я пытаюсь создать тестового пользователя, а затем войти в систему, используя то же самое из экрана входа в систему, а затем пройти через мои экраны. Похоже, довольно распространенная вещь, чтобы попытаться сделать.

Тем не менее, после (предположительно) успешного создания тестового пользователя (в спецификации теста, а не Bootstrap.groovy) тот же пользователь не найден при попытке входа в систему.

Когда я делаю User.list () в коде приложения (где у меня есть точка останова в точке входа в систему), ничего не происходит. Но они существуют в тесте. Это как две отдельные сессии.

Кто-нибудь знает правильный способ сделать это? Рад поделиться кодом, если нет очевидного ответа, который мне не хватает.

1 Ответ

0 голосов
/ 16 января 2019

Оказывается, аннотация @Rollback делает больше, чем было очевидно для меня. И пока (согласно документации) это;

гарантирует, что каждый метод тестирования выполняется в транзакции, которая откатывается

также создает управляемую тестом транзакцию, которая полностью независима от сеанса приложения. И поэтому, если аннотация @Rollback используется для моей цели выше, пользователь, созданный в тесте (например, в setup()), никогда не будет виден в приложении, и поэтому логика Spring Security не будет работать, когда она не сможет загрузить пользователя.

Обратите внимание, что после удаления аннотации @Rollover блоки транзакций придется создавать вручную с помощью чего-то вроде:

User.withTransaction {
 // ... do work here
}
...