2017-11-29 4 views
1

私はExtJSアプリのUIテストにBryntum Siestaを使用しています。私はTestClassを作成し、さまざまなビューに対してそのメソッドを使用することを目指しています。テストの全体の動作は、package,viewgridなどのいくつかの特定のものだけが変化しています。SiestaでtestClassメソッドをオーバーライドする方法は?

メインテストクラス

var isDisplaying = 'Grid is displaying now.'; 
var collapseDesc = 'Collapse Navbar'; 

Class('Siesta.Test.ListScreen', { 

    isa  : Siesta.Test.ExtJS, 

    methods: { 
     navigation: function (callback) { 
      var t = this; 

      t.chain(
       {waitForCQ: 'treelist[itemId=navigationTreeList]'}, 

       function (next) { 
        t.click('treelist[itemId=navigationTreeList]'); 
        next(); 

       }, 
       {click: '>> treelistitem[_text=Package_Name]'}, 
       {click: '>> treelistitem[_text=Package_Submodule]', desc: 'Package Submodule'+isDisplaying}, 
       {click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc}, 

       function (next) { 
        console.log('navigation func log'); 
        next(); 
       }, 

       callback 
      ) 
     } 
    } 
}); 

そしてこのTestClassをがPackage_Submoduleから呼び出すと成功を得る:ここではテスト・スイートからのいくつかのスニペットがある

describe('UI Testing: Submodule List Screen', function (t) { 

    //Extended method for navigation to submodule 
    t.it('Should open: Submodule Grid', function (t) { 
     t.chain(
      { 
       navigation: t.next 
      } 
     ) 
    }); 
}); 

ここの事は私がしたいです別のサブモジュールに対して同じTestClassメソッドを呼び出して、Package_Nameとなどのいくつかをオーバーライドします210。どのように私はこれを行うには成功することができますか?事前に

おかげ


UPDATE JackSamuraの答え通過:

親愛なる@SamuraiJack私はメインクラス(ListScreen)をリファクタリングしてhas属性を挿入しました。同様にharnessconfigプロパティに変更しましたが、残念ながらmyPackageNameまたはmySubModuleを上書きしませんでした。代わりに、私はこのエラーました:

Waiting for element ">> treelistitem[_text=packageName]" to appear 

は同様に私は、関数の引数を使用することを試みたが、それはあまりにも動作しませんでした。なぜ新しい値を上書きできないのか考えてください。

メインクラス(更新):

var isDisplaying = 'Grid is displaying now.'; 
    var collapseDesc = 'Collapse Navbar'; 

    Class('Siesta.Test.ListScreen', { 

     isa  : Siesta.Test.ExtJS, 

     has : { 
      myPackageName : 'packageName', 
      mySubModule : 'subModule' 
     }, 

     methods: { 
      navigation: function (callback) { 
       var t = this; 

       t.chain(
        {waitForCQ: 'treelist[itemId=navigationTreeList]'}, 

        function (next) { 
         t.click('treelist[itemId=navigationTreeList]'); 
         next(); 

        }, 
        {click: '>> treelistitem[_text='+this.myPackageName+']'}, 
        {click: '>> treelistitem[_text='+this.mySubModule+']', desc: this.mySubModule+isDisplaying}, 
        {click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc}, 

        function (next) { 
         console.log('navigation func log'); 
         next(); 
        }, 

        callback 
       ) 
      } 
     } 
    }); 

インデックス。JS

group: 'UI Tests', 
    items: [ 
     { 
      group: 'Submodule List Screen', 
      testClass: Siesta.Test.ListScreen, 
      items: [ 
       { 
        title   : 'Submodule1', 
        hostPageUrl  : localApp, 
        url    : '02-ui-tests/02_01-submodule-list-screen/submodule1-list.t.js', 
        config  : { 
         myPackageName  : 'Package1', 
         mySubModule  : 'Submodule1' 
        } 
       }, 

答えて

2

あなたは2通りの方法でそれを行うことができます。

// callback should be the last one 
navigation: function (packageName, packageSubModule, callback) { 

はおそらく自明

2):

1)は、 "ナビゲーション" メソッドに引数を追加します。もう少し複雑です - カスタムテストクラスに新しい属性を追加してください:

Class('Siesta.Test.ListScreen', { 

    isa  : Siesta.Test.ExtJS, 

    has : { 
     // values goes into prototype, like in Ext 
     myPackageName : 'packageName', 
     mySubModule : 'subModule' 
    }, 

    methods: { 

その後、あなたはいつものように「ナビゲーション」方法でそれらの属性を参照することができます:this.myPackageName

を次に、無効にするために、新しいテストクラスを作成することができます(Siesta.Test.ListScreenをサブクラス化)し、その中に属性を再定義しますか、より高速な答えを得るために - シエスタフォーラムに投稿:

harness.start(
    { 
     url   : 'mytest.t.js', 
     config  : { 
      myPackageName  : 'value1', 
      mySubModule  : 'value2' 
     } 
    }, 
    ... 
) 

ヒント:代わりに、テスト記述子の設定プロパティを使用しhttps://www.bryntum.com/forum/viewforum.php?f=20

UPDATE:

「ナビゲーション」メソッドがサブテスト(「t.it()」または「t.describe()」の各セクションで別々の「サブテスト」を作成するごとに)起動されている可能性があります。これらのサブテストには、設定が適用されません。トップレベルのテストにのみ適用されます。 1つの解決策は、属性値をコピーすることです:

// in the "methods" of the custom test class 
    processSubTestConfig : function (config) { 
     var cfg = this.SUPER(config) 

     cfg.myPackage = this.myPackage 
     ... 

     return cfg 
    }, 

しかし、それはすでに高度なシエスタ内部のコーディングです。おそらく関数引数を使うだけで簡単になります。

+0

親愛なる@SamuraiJackはアドバイスのおかげです。私は両方の側面を実装し、プロセスを理解しています。ところで、残念ながら、私はBryntumフォーラムにアクセスするための助成金を支払っていないので、それはありません。そして今、私は個人的な開発のためにシエスタの無料Liteバージョンを使用しています。 –

+0

私はあなたのアドバイスの質問ベースの実装を更新しましたが、いくつかのエラーがありました。更新された部分を確認してください。どうもありがとう。 –

+1

Bryntumフォーラムは無料で、登録しようとします。 Siesta Liteのユーザーも同様です。 – SamuraiJack

関連する問題