2017-11-29 20 views
1

저는 ExtJS 앱을 테스트하는 UI에 Bryntum Siesta를 사용하고 있습니다. 나는 TestClass을 만들었으며 다른 뷰에 대해 그 메서드를 사용하려고합니다. 테스트의 전체 동작은 동일하지만 일부 특정 작업 만 변경됩니다 (예 : package, view, grid).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. 어떻게하면 성공할 수 있습니까? JackSamura의 대답을 통해 사전


UPDATE에서

감사 :

친애하는 @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 가지 방법으로 그것을 할 수 있습니다 :

1) "탐색"방법에 인수를 추가

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

아마 자기 설명

2) 좀 더 복잡한 - 사용자 지정 테스트 클래스에 새 특성을 추가하십시오.

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()"섹션마다 별도의 하위 테스트가 만들어집니다). 하위 테스트는 구성이 적용되지 않으며 최상위 테스트에만 적용됩니다. 한 가지 해결책은 속성 값을 복사하는 것입니다.

// 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 포럼에 액세스 할 수있는 보조금이 없습니다. 그리고 지금은 개인적인 개발을 위해 Siesta의 무료 라이트 버전을 사용하고 있습니다. –

+0

조언을 기반으로 질문을 업데이트했지만 몇 가지 오류가 발생했습니다. 업데이트 된 부분을 검토해주십시오. 고마워. –

+1

Bryntum 포럼은 무료이며, 단지 등록하려고 시도합니다. Siesta Lite 사용자도 환영합니다. – SamuraiJack