3

在BootStrap.groovy中運行fixtureLoader.load時出現問題。Grails夾具插件和功能測試重複數據

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」運行,則執行功能和集成測試。

這在功能測試相位數據的JSON表示(用「測試應用程式內」運行):

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

這是在功能測試相位數據的相同JSON表示(用「測試應用程式內運行功能:「)

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

如何避免這種重複?

在此先感謝

回答

4

默認的測試數據庫是一種非持續性內存HSQLDB,使程序在你的測試結束丟棄,但更改它會結轉的測試階段之間。此外,集成測試回滾每次測試後的變化,但這並不適用於Bootstrap.groovy做數據庫的變化。

一個簡單的方法來解決這個是簡單的檢查了燈具的存在,試圖創建它們之前。例如:

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

另一種可能的解決方案是使用用於整合和功能測試單獨的數據庫。還有如何在http://www.redtoad.ca/ataylor/2011/02/setting-grails-functional-test-database/

+0

非常感謝你的迴應做一個例子。此解決方法可能適用於我:-) – sourcerebels

相關問題