2017-09-27 3 views
0

J'essaie d'obtenir des valeurs d'un modèle JSON dans mon fichier Journey. Dans la page ce n'est pas un problème d'obtenir les valeurs, parce que je peux facilement obtenir ma vue.UI5 get Modèle dans le test OPA

Le problème est que je ne sais pas comment retourner les valeurs d'un test OPA dans le fichier Journey.

partie du voyage:

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(); 
     } 
    } 

Une partie de la page:

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

Semble la waitFor sur la page est déclenchée quand je suis déjà dans la boucle (peut-être sur la base Promise) , donc iLenght est indéfini.

Vous cherchez un moyen de retourner le var avant le début de la boucle.

Répondre

0

Je pense que j'ai trouvé une solution à votre problème, mais la façon dont vous l'implémenteriez spécifiquement dépend de la façon dont vous créez le modèle dans votre application.

Lors de l'écriture de tests OPA, vous pouvez préparer des objets ou des données spécifiques pour une utilisation ultérieure dans la méthode "setup" de l'objet "module" et les détruire dans la méthode "teardown". Donc, dans votre fichier voyage, vous pouvez utiliser quelque chose comme ceci pour créer une variable et l'affecter à l'objet page de test:

\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 });

Ensuite, dans votre test de opa réel que vous pouvez accéder à la variable:

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(); 
 
    } 
 
}

le code en mode ls.js fichier pour créer le modèle est:

\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 }

Si vous ne créez pas votre modèle dans une méthode dans un fichier séparé, vous aurez besoin de trouver un moyen d'instancier dans la méthode "setup" mais je pense que le principe sera le même. Cette méthode est exécutée chaque fois qu'un nouvel opaTest est démarré, mais il existe peut-être d'autres méthodes que vous pouvez extraire du code source ou trouver dans une documentation qui n'est appelée qu'une seule fois. Je n'ai pas le temps en ce moment mais crier si vous ne pouvez pas et je peux jeter un coup d'oeil plus tard. J'espère que cela aide.