Плагин Grails fixtures и функциональное тестирование дублируют данные - PullRequest
3 голосов
/ 19 сентября 2011

У меня проблема при запуске fixtureLoader.load в BootStrap.groovy.

import grails.plugin.fixtures.FixtureLoader

class BootStrap {

    def fixtureLoader

    def init = { servletContext ->

            environments {
                test  {

                    fixtureLoader.load {

                        build {
                            device1(Device, name: "device1")
                            device2(Device, name: "device2")
                            device3(Device, name: "device3")
                        }
                    }
                }
            }
        }

    def destroy = {
    }
}

Когда Grails начинает фазу тестирования интеграции, загрузка выполняется.Затем, когда Grails начинает фазу функционального тестирования, загрузка выполняется в другой раз без очистки предыдущего выполнения.

Это означает:

Если я запускаю с «test-app function:» или «test-app»Интеграция: «все в порядке.Если я запускаю «test-app», то выполняются функциональные и интеграционные тесты.

Это представление данных в формате JSON на этапе функционального тестирования (выполняется с «test-app»):

[[name:device3], [name:device2], [name:device1],[name:device3], [name:device2], [name:device1]]

Это то же представление данных в формате JSON на этапе функционального тестирования (работает с «test-app functions:»)

[[name:device3], [name:device2], [name:device1]]

Как избежать дублирования?

Заранее спасибо

1 Ответ

4 голосов
/ 19 сентября 2011

Тестовая база данных по умолчанию - это непостоянный hsqldb в памяти, который отбрасывается в конце ваших тестов, но изменения в нем переносятся между фазами тестирования.Кроме того, интеграционное тестирование откатывает изменения после каждого теста, но это не относится к изменениям базы данных, сделанным в Bootstrap.groovy.

. Один простой способ исправить это - просто проверить наличие фиксаторов перед попыткойсоздать их.Например:

environments {
    test {
        if (Device.count() == 0) {
            // build fixtures
        }
     }
 }

Другим возможным решением является использование отдельных баз данных для интеграции и функциональных тестов.Вот пример того, как это сделать на http://www.redtoad.ca/ataylor/2011/02/setting-grails-functional-test-database/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...