Testcafe не может найти тесты, завернутые в итератор - PullRequest
3 голосов
/ 19 июня 2019

На моей странице часто задаваемых вопросов есть несколько элементов расширения, поэтому я хочу протестировать их все. При записи моего прибора и / или теста в секции foreach терминал отображает ошибку ERROR no test to run. Я не понимаю, почему

Я пытался обернуть единственный тест в foreach и все приборы с тестом, результат тот же.

fixture('check FAQ expand items').page(URL.local.faq)//.meta({ status: 'indev' })
  .beforeEach(async () => {await waitForReact();
  })
  .before(async t => {
  await waitForReact();
  await list();
  }).only;
faqItems.forEach( (element) => {
  test(`check that ${element.getReact(({key})=>key)} is present`, async t => {
    await t.expect(element.find('[expanded={true]]').exists).ok();
  });
});

Я ожидаю, что в тестовом кафе будет faqItems.length количество тестов в приспособлении "проверить FAQ, развернуть пункты"

Я запускаю тесты с командой testcafe chrome faq.test.ts

снимок экрана с результатами теста запуска

UPD

let faqItems: Array<Selector> = [faq.item];
async function list() {
  const count =  await faq.item.count;
  console.log(`count = ${count}`)
  for (let i = 0; i < count; i++) {
    await faqItems.push( await faq.item.nth(i));
    console.log(await faqItems[i].getReact(({key})=> key));
  }
}

fixture('check FAQ expand items').page(URL.local.faq)//.meta({ status: 'indev' })
  .beforeEach(async () => {
    await waitForReact();
    await list();
  })
faqItems.forEach((element)=>{
  test(`check that ${element.getReact(({key})=>key)} is present`, async t => {
    await t.expect(element.find('[expanded={true}]').exists).ok();
  });
})

результат фото

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Прежде всего, предварительная обработка части кода не является частью цикла forEach, и это может вызвать проблемы.Я думаю переместить faqItems.forEach() выше fixture вот так

faqItems.forEach( (element) => {
   fixture('check FAQ expand items').page(URL.local.faq)//.meta({ status: 'indev' })
     .beforeEach(async () => {await waitForReact();
     })
     .before(async t => {
        await waitForReact();
        await list();
     }).only;

     test(`check that ${element.getReact(({key})=>key)} is present`, async t => {
        await t.expect(element.find('[expanded={true]]').exists).ok();
     });
   });
})

Если в fixture у вас есть какой-то тест, который не должен выполняться для каждого элемента FAQ, то перенесите его на другой прибор.

Во-вторых, я не уверен, что вы можете использовать forEach здесь, потому что forEach как цикл и как функция для массивов не работает с async/await.Вы можете использовать for...of петлю или стандартную for петлю

0 голосов
/ 02 июля 2019

Проблема была в том, что массив инициализирован пустым.Я не знаю почему, но в тестовом массиве содержатся инициализированные данные вместо сгенерированных в "BeforeAll".Это похоже на ошибку testcafe, но, возможно, я слишком младший, чтобы понять основную причину.ps кстати не имеет значения, где находится крепеж внутри / снаружи петли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...