У меня есть служба, которая обновляет столбец db. Обновление выполняется с помощью executeUpdate. В моем тесте после метода службы я пытаюсь загрузить запись. Загрузка записей и каждое поле заполняются за исключением того, что я только что обновил в службе.grails executeUpdate ошибка очистки в тесте интеграции
Чтобы сделать его более странным, когда я запускаю код, как правило, через браузер, он отлично работает. Я могу посмотреть в базе данных и увидеть, что поле сохраняется. Только интеграционный тест не работает. Это должно быть какая-то проблема спящего сеанса с грязным полем.
Вот мой урезанный код. Я оставил информацию о контроллере. Мой тест вызывает контроллер, контроллер вызывает службу.
class BasicProfile {
static hasMany = [ photos:Photo ]
}
class Photo {
BasicProfile basicProfile
String caption
String publicId
static belongsTo = [ basicPofile:profile ]
}
class PhotoService {
def updateCaption() {
...
Photo.executeUpdate("update Photo p set p.caption = ? where p.basicProfile.id = ? and p.publicId = ? ",
[newCaption, profile.id, publicId])
...
}
}
void testUpdateCaption() {
...
controller.updateCaption() //controller just calls the photoService method
//get json result from controller to load publicId
...
Photo photo = Photo.findByPublicId(publicId)
assertEquals "my new caption", photo.caption //photo.caption is null, but the rest of the photo object is populated properly from the database load
}
Я добавил точку останова на утверждение, чтобы просмотреть экземпляр фотографии. Это допустимый экземпляр, и каждое поле заполняется данными с момента его создания (до вызова контроллера.updateCaption(). Но после вызова controller.updateCaption() поле заголовка должно иметь действительные данные, но оно по-прежнему равно нулю (. по умолчанию при создании экземпляра)
Yep, что установил ее. – spock99