Параметры для проверки удаления пользователя:
В конечном итоге, плохая практика - делать тесты зависимыми от других тестов .
Тем не менее, два или, возможно, три варианта, которые должны работать:
A: итерация по списку пользователей в рамках одного теста
describe(`Delete User`, async () => {
describe(`Confirmation `, () => {
it(`Log all users out who previously logged in`, async () => {
list.forEach((item) => {
console.log(item);
});
});
});
});
Поскольку массив list
заполненный предыдущим тестом, вставка кода, зависящего от него, в следующий тест обеспечит наличие значений для работы.
B: Войдите и удалите пользователя за один тест
describe(`Login and delete user `, async () => {
tests.forEach(test => {
it(` should login and delete user with ` + test.type, async () => {
const myId = userPage.getUID().getText();
// Select and delete myId here
});
});
});
Вы можете полностью удалить массив list
, поместив весь пользовательский поток в один большой интеграционный тест.
C: использовать фиктивные данные (может быть неприменимо, если данные случайные)
describe(`Delete User`, async () => {
const list = ["QR417msytVrq", "V0fxayA3FOBD", "QnaiegiVoYhs"];
describe(`Confirmation `, () => {
list.forEach((item) => {
it(
` should select and Delete the User having id as ` + item,
async () => {}
);
});
});
});
Если вы знаете, какие значения удаляются заранее, вы можете добавить их вручную. Если значения генерируются случайным образом, это не сработает.
Другие проблемы:
Порядок выполнения тестирования
Используемый вами синтаксис массива Dynami c выглядит правильно, однако у вас, похоже, есть проблема с порядком выполнения в вашем тесты.
Код в функциях describe
, выходящий за рамки спецификаций (блоки it
), выполняется до того, как будет выполнен какой-либо код внутри спецификаций. Среда тестирования будет проходить дерево из describe
блоков, выполняя любой найденный код, но только принимая во внимание спецификации it
. Когда он завершит это, он затем выполняет найденные спецификации it
в последовательном порядке.
Когда вы пытаетесь сохранить значение list[0]
, спецификации 'Login User'
еще не выполнены. Более конкретно:
describe(`Login User `, async () => {
tests.forEach(test => {
it(` should login user with ` + test.type, async () => {
// This code is executed AFTER the code in the 'Delete User'
// block but BEFORE the 'Delete User' spec
const myId = userPage.getUID().getText();
list.push(myId);
});
});
});
describe(`Delete User`, async () => {
// This code is executed before any specs are run
let item = list[0];
// List is [] when item is initialized
// The following spec will therefore not work as item is undefined
it(` should select and Delete the User having id as ` + item, async () => {
});
});
Возможным решением этой проблемы было бы изменить строку 'Delete User'
spe c на что-то вроде ' should select and Delete first User'
, а также переместить весь код за пределы spe c внутрь.
Блоки Describe не должны возвращать обещания.
В вашем примере кода есть describe
блоков (в частности, 'Login User'
, 'Delete User'
и 'Confirmation'
), которые возвращают обещания. Вы должны удалить async
перед объявлениями функций. Спецификации могут и должны оставаться прежними. Например:
describe(`Login User `, () => {
Синтаксис объекта
Объект тестов в начале вашего примера не использует синтаксис объекта JS / TS. За каждым ключом следует ставить двоеточие перед значением вместо знака равенства. Вы, вероятно, хотели написать:
const tests = [{
type: 'admin',
id: '',
uname: 'foo',
pass: 'bar'
},
{
type: 'super',
id: '',
uname: 'foo1',
pass: 'bar'
},
{
type: 'normal',
id: 'customId',
uname: 'foo',
pass: 'bar'
}
];
Источники: