2015-12-22 2 views
0

J'ai une très grande suite de tests edit_person_test.js que j'essaie de décomposer en suites de test plus petites. Je voudrais appeler des suites plus petites comme add_person_cancel.js d'une suite principale et transmettre les données créées dans la suite principale() dans les plus petites suites de tests (edit_person_test.js line 75). Cependant, lorsque j'essaie d'accéder aux données de la petite suite de tests, elle est toujours nulle. Comment puis-je créer une copie des données et la transmettre dans chaque suite de tests plus petite?Passage de données entre des suites de tests internes

// Very large parent suite add_person_test.js 
define([ 
    'intern!object', 
    'pages/PersonTabPage', 
    'pages/AddPersonPage', 
    'data-objects/PersonData', 
    './add_person_cancel' 
], function(registerSuite, PersonTabPage, AddPersonPage, Person, addPersonCancel) { 

registerSuite(function() { 

    var personTabPage = null; 
    var addPersonPage = null; 
    var person = null; 

    return { 
    // Assumes we are logged in 
    name: 'Edit Person Test', 

    before: function() { 
     person = new Person(); // randomly generated data to create person with 
     personTabPage = new PersonTabPage(this.remote, this.timeout); 
     addPersonPage = new AddPersonPage(this.remote, this.timeout); 
    }, 

    // calling smaller suite here 
    AddPersonCancel: addPersonCancel.CancelAddPersonTest(personTabPage, addPersonPage, person), 

    }; 
}); 
}); 

// Smaller test suite add_person_cancel.js 
define(function() { 

    return function(personTabPage, addPersonPage, person) { 
    return { 
     // Assumes we are logged in 
     name: 'Cancel Add Person Test', 

     OpenAddPersonPage: function() { 
     logger.info(person); 
     return personTabPage.clickAddPerson() 
      .getAccumulatedState(); 
     }, 

     ValidateButtonDisabledStatus: function() { 
     return addPersonPage.personButtonStatus(function(status) { 
      assert.isFalse(status, 'Buttons are enabled even before entering person name'); 
      }) 
      .getAccumulatedState(); 
     }, 

     EnterNameClickCancelButton: function() { 
     return addPersonPage.enterFirstName(person.firstName) 
      .enterLastName(person.lastName) 
      .clickCancelButton() 
      .waitForPageReady() 
      .getAccumulatedState(); 
     }, 

     CheckPersonNameNotSaved: function() { 
     return personTabPage 
      .findInPersonsTableAssertion(person.firstName + ' ' + person.lastName, false, function(result) { 
      assert.isFalse(result, 'Person name is saved even on closing the trowser using Cancel button'); 
      }) 
      .getAccumulatedState(); 
     } 
    }; 
    }; 
}); 

Répondre

1

Cette fonction CancelAddPersonTest est erroné:

AddPersonCancel: addPersonCancel.CancelAddPersonTest(personTabPage, addPersonPage, person), 

Cet appel se produit lorsque l'objet est en cours de construction littérale, à laquelle rien ne point a jamais couru (vous créez encore le littéral d'objet qui va définir la structure de test) donc toutes ces variables que vous passez sont toutes nulles, et le seront toujours.

La solution la plus simple est de créer un objet au début puis passer à CancelAddPersonTest au lieu de variables individuelles:

var personState = { 
    personTabPage: null, 
    addPersonPage: null, 
    person: null 
}; 

return { 
    // ... 

    before: function() { 
    personState.person = new Person(); // randomly generated data to create person with 
    personState.personTabPage = new PersonTabPage(this.remote, this.timeout); 
    personState.addPersonPage = new AddPersonPage(this.remote, this.timeout); 
    }, 

    // ... 

    AddPersonCancel: addPersonCancel.CancelAddPersonTest(personState) 
}; 

Maintenant, utilisez les propriétés de cet objet dans CancelAddPersonTest que vous essayez d'utiliser la paramètres maintenant, et les choses vont fonctionner comme vous le souhaitez.