testplane icon indicating copy to clipboard operation
testplane copied to clipboard

Можно ли динамически создавать тесты?

Open fantazer opened this issue 4 years ago • 2 comments

Добрый день подскажите можно ли реализовать такой подход.

В 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 не видит созданные таким образом тесты. Если передать заранее готовый массив, то все срабатывает. Подскажите есть ли возможность решить эту проблему ?

fantazer avatar May 25 '21 13:05 fantazer

Можно оборачивать не it, а describe — тогда всё работает: https://stackoverflow.com/questions/22465431/how-can-i-dynamically-generate-test-cases-in-javascript-node

loudless avatar May 27 '21 11:05 loudless

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

Пробовал так. На выходе получаю

image

fantazer avatar May 28 '21 08:05 fantazer

В beforeEach из элементов на странице (пункты меню) создаю массив - объектов {url: '', name: ''} После в цикле прохожу по этому массиву

В hermione (как и практически в любом тестраннере) есть 2 фазы:

  • чтение тестов. В этот момент читаются файлы с тестами, и группируются в дерево. На этом этапе выполняются только коллбэки describe'ов. Коллбэки хуков и тестов не вызываются
  • выполнение тестов. В этот момент выполняются коллбэки хуков и тестов

Если вы в коллбэке beforeEach пытаетесь сгенерировать массив, на основании которого потом будете генерировать новые тесты, то это не сработает. Т.к. в момент чтения тестов этот коллбэк не будет выполнен.

Здесь можно поступить так:

  • генерировать массив не в beforeEach, а либо в глобальном скоупе, либо в теле коллбэков describe'ов
  • генерировать массив в beforeEach, но тогда потом использовать этот массив внутри коллбэка тестов, например, для того, чтобы сгенерировать пачку ассертов

j0tunn avatar Nov 09 '22 08:11 j0tunn