Передача данных между тестовыми наборами для стажеров

У меня есть очень большой набор тестов edit_person_test.js, который я пытаюсь разложить на более мелкие наборы тестов. Я хотел бы вызвать меньшие наборы, такие как add_person_cancel.js, из основного набора и передать данные, созданные в основном наборе before(), в меньшие наборы тестов (edit_person_test.js, строка 75). Однако, когда я пытаюсь получить доступ к данным в меньшем наборе тестов, это все равно null. Как я могу создать одну копию данных и передать ее в каждый меньший набор тестов?

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

1 ответ

Решение

Эта функция CancelAddPersonTest неверна:

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

Этот вызов происходит во время конструирования литерала объекта, и в этот момент ничего не выполнялось (вы по-прежнему создаете литерал объекта, который определит структуру теста), поэтому все передаваемые переменные все имеют значение null и всегда будут,

Самое простое решение - создать объект заранее, а затем передать его CancelAddPersonTest вместо отдельных переменных:

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

Теперь используйте свойства этого объекта в CancelAddPersonTest сейчас вы пытаетесь использовать параметры, и все будет работать так, как вы хотите.

Другие вопросы по тегам