TestCafe:使用来自客户端的数据生成测试?

TestCafe: Generate Tests using Data from the Client?

使用 TestCafe [1],我想执行以下操作:

  1. 导航到 URL。
  2. 执行客户端 JavaScript 以检索其他 URL 的列表。
  3. 为每个URL生成一个测试。
  4. 同时执行测试

使用单个测试并串行执行的工作示例

下面的简化测试用例有效但不是我所需要的,它执行以下操作:

  1. 执行测试。
  2. 导航到测试 "before" 挂钩中的 URL。
  3. 执行客户端 JavaScript 以在测试的 "before" 挂钩中检索 URL 的列表。
  4. 运行 测试正文中每个 URL 连续 的断言。

我通过 TestCafe 的测试文件 运行 包含以下内容:

import { ClientFunction, Selector } from 'testcafe';

const getSiteMapFromClientSide = ClientFunction(
  () =>
    new Promise(resolve => {
      // this example looks like it could be synchronous, or that the data could
      // be defined in the test but this data comes from an async source which
      // is only reachable client side.
      resolve(['https://localhost:6007/some/url1', 'https://localhost:6007/some/url2']);
    })
);

fixture('Storybook').page('https://localhost:6007');

const modalError = Selector('#error-message');

test.before(async t => {
  t.ctx.siteMap = await getSiteMapFromClientSide();
})('Smoke Test all Stories for Full Screen Errors or Blank Screens', async t => {
  // assert we have URLs or we'll have a passing suite that looped over nothing
  await t.expect(t.ctx.siteMap.length > 0).ok('Site Map is Empty');
  // assert each story has no full screen error message
  await Promise.all(
    t.ctx.allStories.map(async url => {
      await t
        .navigateTo(url)
        .expect(modalError.exists && modalError.visible)
        .notOk(`Full Screen Error found at ${url}`);
    })
  );
});

上下文

在实际应用中,我正在为 Storybook [2] 编写冒烟测试。要获得所有 URL 的列表,我需要调用结果 require('@storybook/react').getStorybook(),仅在 运行 时在 Storybook 客户端应用程序中可用。 我已将这些细节从简化的测试用例中删除,因为它们与 TestCafe 无关。

[1] http://devexpress.github.io/testcafe [2] https://storybook.js.org

我认为最好将您的任务分成两部分。 首先,您需要通过 ClientFunction 获取所有经过测试的 URL,并使用第一个测试文件将这些 URL 保存在某个地方(例如,保存到全局变量)。 然后使用 concurrency 选项启动一个新的 TestCafe 任务,并将 src 参数设置为您的第二个测试文件。 最好的方法是使用 createTestCafe 函数。请同时阅读以下文章http://devexpress.github.io/testcafe/documentation/using-testcafe/programming-interface/createtestcafe.html