Передача данных между тестовыми наборами для стажеров
У меня есть очень большой набор тестов 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
сейчас вы пытаетесь использовать параметры, и все будет работать так, как вы хотите.