testplane
testplane copied to clipboard
Можно ли динамически создавать тесты?
Добрый день подскажите можно ли реализовать такой подход.
В beforeEach из элементов на странице (пункты меню) создаю массив - объектов {url: '', name: ''}
После в цикле прохожу по этому массиву
listPagesArray.forEach((el, i) => {
it('program' + i, function() {
let browser = this.browser
return browser
.url(el.url + '?new')
.url(el.url + '?ISTEST')
.windowHandleSize({width: 1920, height: 1200})
.waitForExist('.page', 50000)
.assertView('Order', '.content', mainConfig.tolerance)
})
})
Но Hermione не видит созданные таким образом тесты. Если передать заранее готовый массив, то все срабатывает. Подскажите есть ли возможность решить эту проблему ?
Можно оборачивать не it, а describe — тогда всё работает: https://stackoverflow.com/questions/22465431/how-can-i-dynamically-generate-test-cases-in-javascript-node
@loudless
describe('testName', function() {
beforeEach(function(done) {
hermione.ctx.elHeight = 200
})
describe('testNameInner', function() {
it('testCase' + hermione.ctx.elHeight, async function() {
console.log('StartTest')
console.log(hermione.ctx.elHeight)
})
})
})
Пробовал так. На выходе получаю

В beforeEach из элементов на странице (пункты меню) создаю массив - объектов {url: '', name: ''} После в цикле прохожу по этому массиву
В hermione (как и практически в любом тестраннере) есть 2 фазы:
- чтение тестов. В этот момент читаются файлы с тестами, и группируются в дерево. На этом этапе выполняются только коллбэки describe'ов. Коллбэки хуков и тестов не вызываются
- выполнение тестов. В этот момент выполняются коллбэки хуков и тестов
Если вы в коллбэке beforeEach пытаетесь сгенерировать массив, на основании которого потом будете генерировать новые тесты, то это не сработает. Т.к. в момент чтения тестов этот коллбэк не будет выполнен.
Здесь можно поступить так:
- генерировать массив не в beforeEach, а либо в глобальном скоупе, либо в теле коллбэков describe'ов
- генерировать массив в beforeEach, но тогда потом использовать этот массив внутри коллбэка тестов, например, для того, чтобы сгенерировать пачку ассертов