2013-09-05 4 views
5

私はGrailsプロジェクト内で実行している一連のSpecテストを持っています。環境に応じた特定のGebテストの実行

私がローカルにいるときには特定のセットを実行し、プリプロード環境を実行するときには別のセットを実行する必要があります。 私の現在の設定は、両方の環境に対して同時にすべての仕様を実行しています。これは避けたいものです。

私は私のGebConfigに設定されていることを、複数の環境を持っている:

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

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

} 

答えて

4

あなたはスポックの設定ファイルを使用することができます。

テストの2種類の注釈を作成 - @Local@PreProdを、Groovyで例えば:

import java.lang.annotation 

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

次のステップは、例えば、それに応じてスペックに注釈を付けることである。

@Local 
class SpecificationThatRunsLocally extends GebSpec { ... } 

次に作成次のコンテンツを含む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が独自のテストランナーを使用しているようです。つまり、Grailsから仕様を実行するときにSpockConfig.groovyが考慮されていないことを意味します。 Grailsの下で動作する必要がある場合は、@ IgnoreIf/@ Requireが組み込みSpock拡張アノテーションを使用する必要があります。

まず、特定の仕様を有効にする必要がある場合のロジックを使用してClosureクラスを作成します。論理を拡張注釈のクロージャ引数として直接入れることもできますが、たくさんの仕様に注釈を付ける場合は、その場所のコードをコピーするのは面倒です。その後、

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