2013-09-05 3 views
5

Grails 프로젝트 내에서 실행중인 Spec 테스트 세트가 있습니다.환경에 따라 특정 Geb 테스트 실행

가 나는 지역에 오전 때 사양의 특정 세트를 실행해야하고, 사양의 또 다른 세트는 내가 사전 자극 환경을 실행할 때. 현재 설정은 두 환경 모두에서 동시에 모든 사양을 실행합니다. 이는 피하고 싶습니다.

environments { 
    local { 
     baseUrl = "http://localhost:8090/myApp/login/auth" 
    } 

    pre-prod { 
     baseUrl = "https://preprod/myApp/login/auth" 
    } 

} 

답변

4

당신은 스팍 설정 파일을 사용할 수

나는 내 GebConfig에 구성되어 있는지, 여러 환경을 가지고있다.

@Local 
class SpecificationThatRunsLocally extends GebSpec { ... } 

하는 것은 다음 만들기 :

import java.lang.annotation 

@Retention(RetentionPolicy.RUNTIME) 
@Target([ElementType.TYPE, ElementType.METHOD]) 
@Inherited 
public @interface Local {} 

다음 단계는 예를 들어, 그에 따라 사양에 주석을 달 수 있습니다 : 그루비 예를 들어 @Local@PreProd -

시험의 두 가지 유형에 대한 주석 만들기 다음 내용을 당신의 GebConfig.groovy 파일 옆에 SpockConfig.groovy 파일 :

def gebEnv = System.getProperty("geb.env") 
if (gebEnv) { 
    switch(gebEnv) { 
     case 'local': 
      runner { include Local } 
      break 
     case 'pre-prod': 
      runner { include PreProd } 
      break 
    } 
} 

편집 : 그것은 Grails에에서 사양을 실행할 때 SpockConfig.groovy이 고려되지 않음을 의미 자체 테스트 주자 사용 Grails는 것 같습니다. Grails에서 작동하려면 @ IgnoreIf/@ Require 내장 Spock 확장 주석을 사용해야합니다.

먼저 주어진 스펙이 활성화되어야 할 때의 논리를 갖는 클로저 클래스를 만들 수 있습니다. 논리를 확장 주석에 대한 클로저 인수로 직접 지정할 수 있지만 많은 사양에 주석을 추가하려는 경우 해당 코드 전체를 그 자리에 복사하는 것이 성가시다.

class Local extends Closure<Boolean> { 
    public Local() { super(null) } 
    Boolean doCall() { 
     System.properties['geb.env'] == 'local' 
    } 
} 

class PreProd extends Closure<Boolean> { 
    public PreProd() { super(null) } 
    Boolean doCall() { 
     System.properties['geb.env'] == 'pre-prod' 
    } 
} 

그리고 당신의 사양 주석 : 당신이 응답을

@Requires(Local) 
class SpecificationThatRunsLocally extends GebSpec { ... } 

@Requires(PreProd) 
class SpecificationThatRunsInPreProd extends GebSpec { ... } 
+0

감사 erdi,하지만 어떻게 당신이 예를 수행 주석을하시기 바랍니다 만들려면 어떻게해야합니까? Tx – ErEcTuS

+0

내 업데이트 된 내용보기 – erdi

+0

erdi, 내 SockConfig가 내 grails 응용 프로그램에서 '본'것이 아니며 gebConfig와 동일한 패키지에 넣습니다. 디버깅하는 동안 spockconfig 내의 코드는 절대로 도달하지 않습니다 – ErEcTuS

관련 문제