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