【问题标题】:Testcafe can't find tests wrapped in iteratorTestcafe 找不到包含在迭代器中的测试
【发布时间】:2019-11-02 12:47:09
【问题描述】:

我的常见问题解答页面中的展开元素很少,因此我想测试所有这些元素。 在foreach 部分中编写我的夹具和/或测试时,终端反映了一个错误 ERROR no test to run.我不明白为什么

我尝试将唯一的测试包装在foreach 和所有的fixture 中,结果是一样的。

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 数量的测试

我使用命令 testcafe chrome faq.test.ts 运行测试

screen shot of run test result

更新

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();
  });
})

result pic

【问题讨论】:

  • 乍一看,我在这里看不到任何错误。您能否提供一个示例来演示我的机器上的问题?此外,指定用于运行 TestCafe 测试的命令和您的 TestCafe 版本。
  • 我更新了主题,请检查。 Testcafe 版本是 1.2.0
  • 正如我在您的代码中看到的,faqItems 变量被初始化为一个空数组。所以没有找到测试。我没有看到list 函数的完整代码,也不知道它的作用。如果您在beforeHooklist 函数内填充faqItems,则位置不正确。 faqItems变量应该在fixture定义之前同步填充。
  • 是的,你是对的。看起来很神奇,如果我用第一个元素初始化数组,我的填充数组的方法效果很好。在输出中,我可以看到第一个元素存储到数组两次
  • 我根据您的提示更新了主题。我不明白为什么它在空初始化的情况下不起作用

标签: typescript automated-tests e2e-testing testcafe data-driven-tests


【解决方案1】:

问题是数组初始化为空。我不知道为什么,但进入测试数组包含初始化数据而不是在“BeforeAll”中生成。这似乎是一个 testcafe 错误,但也许我太初级,无法理解根本原因。 p.s.顺便说一句,fixture 内部/外部循环的位置无关紧要。

【讨论】:

    【解决方案2】:

    首先,您的前置条件部分代码不是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 中,您有一些不应该为每个常见问题解答项目运行的测试,则将其移至另一个夹具。

    第二,我不确定你是否可以在这里使用forEach,因为forEach 作为循环和作为数组的函数不适用于async/await。您可以使用for...of 循环或标准for 循环

    【讨论】:

    • 感谢您的回复。 - 我在for 循环内移动了夹具,但它不工作。在官方 testcafe 网站上,我找到了 ddt 的示例。 devexpress.github.io/testcafe/documentation/recipes/…
    • 你是如何运行测试的?用什么命令?或者,如果你有TestRunner,能否提供TestRunner代码?
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多