2017-09-27 4 views
0

私はJourneyファイルのJSONモデルから値を取得しようとしています。このページでは、私の見解を簡単に得ることができるので、値を取得するのは問題ありません。UI5はOPAテストでモデルを取得します

問題は、OPAテストの値をJourneyファイルに戻す方法がわかりません。旅の

パート:ページの

opaTest("Should Navigate to all Workflows and Navigate Home", function(Given, When, Then) { 
    // Arrangements starting the app in Frame 
    Given.iStartMyApp(); 

    //should return the array length of the model 
    var iLength = When.onTheLayerPage.getNumberOfLayers(); 

    for (var iPosition = 0; iPosition < iLength; iPosition++) { 
     When.onTheLayerPage.iSelectListItemAtPosition(iPosition); 
     var iChildLength = When.onTheLayerPage.getNumberOfWorkflows(iPosition); 
     for (var iChildPosition = 0; iChildPosition < iChildLength; iChildPosition++) { 
      When.onTheLayerPage.iSelectChildListItemAtPosition(iPosition, iChildPosition); 
      Then.onTheWorkflowPage.iShouldSeeThePage(); 
      When.onTheAppPage.iPressHomeButton(); 
      Then.onTheLayerPage.iShouldSeeThePage(); 
     } 
    } 

パート:

getNumberOfLayers: function() { 
    this.waitFor({ 
     id: sPageId, 
     viewName: sViewName, 
     actions: function(oPage) { 
      var iLenght = oPage.getModel("out").getProperty("/r/data/layers").length; 
      return iLenght; 
     } 
    }); 
}, 

は、私は(多分約束に基づいて)、forループですでに午前たときにページ上のwaitForがトリガされるようです、iLenghtは未定義です。

ループが開始される前にvarを返す方法を探しています。

答えて

0

私はあなたの問題の解決策を見つけたと思いますが、具体的にどのように実装するかについては、アプリケーションでモデルを作成する方法によって異なります。

OPAテストを書くときに、特定のオブジェクトまたはデータを後で「モジュール」オブジェクトの「設定」メソッドで準備し、「ティアダウン」メソッドで破棄することができます。ですから、変数を作成し、テストページのオブジェクトに割り当てるには、このようなものを使用することができ、あなたの旅のファイルに:

\t module("Test page model", { 
 
\t \t setup: function() { 
 
\t \t \t this.iLength = models.createModel().getProperty("/r/data/layers").length; 
 
\t \t }, 
 
\t \t teardown: function() { 
 
\t \t \t this.iLength = null; 
 
\t \t } 
 
\t });

その後、あなたの実際のOPAのテストでは、変数にアクセスできます。

opaTest("Should Navigate to all Workflows and Navigate Home", function(Given, When, Then) { 
 
    // Arrangements starting the app in Frame 
 
    Given.iStartMyApp(); 
 

 
    //should return the array length of the model 
 
    //var iLength = When.onTheLayerPage.getNumberOfLayers(); <- don't need this line 
 

 
    for (var iPosition = 0; iPosition < this.iLength; iPosition++) { // Access the previously created variable here 
 
     When.onTheLayerPage.iSelectListItemAtPosition(iPosition); 
 
     var iChildLength = When.onTheLayerPage.getNumberOfWorkflows(iPosition); 
 
    for (var iChildPosition = 0; iChildPosition < iChildLength; iChildPosition++) { 
 
     When.onTheLayerPage.iSelectChildListItemAtPosition(iPosition, iChildPosition); 
 
     Then.onTheWorkflowPage.iShouldSeeThePage(); 
 
     When.onTheAppPage.iPressHomeButton(); 
 
     Then.onTheLayerPage.iShouldSeeThePage(); 
 
    } 
 
}

モードでコードls.jsモデルを作成するファイルは以下のとおりです。

\t \t createModel: function() { 
 
\t \t \t var oTestModel = new sap.ui.model.json.JSONModel({ 
 
\t \t \t \t \t "r": { 
 
\t \t \t \t \t \t "data": { 
 
\t \t \t \t \t \t \t "layers": [ 
 
\t \t \t \t \t \t \t \t {"dummy": 1}, 
 
\t \t \t \t \t \t \t \t {"dummy": 2}, 
 
\t \t \t \t \t \t \t \t {"dummy": 3} 
 
\t \t \t \t \t \t \t \t ] 
 
\t \t \t \t \t \t } 
 
\t \t \t \t \t } 
 
\t \t \t \t }); 
 
\t \t \t return oTestModel; 
 
\t \t }

あなたは別のファイルにする方法でモデルを作成しない場合は、インスタンス化の方法を考え出す必要がありますそれは "セットアップ"方法では、私は原則と同じになると思う。このメソッドは、新しいopaTestが開始されるたびに実行されますが、ソースコードを掘り下げたり、一度しか呼び出されないドキュメントを見つけることのできる代替メソッドがいくつか存在する可能性があります。私は今は時間がありませんが、あなたができなくて、私は後で見て回ることができます場合は息子。それが役に立てば幸い。

関連する問題