TestCafe: генерировать тесты, используя данные из клиента? - PullRequest
0 голосов
/ 08 ноября 2018

Используя TestCafe [1], я хотел бы сделать следующее:

  1. Перейдите к URL.
  2. Выполните клиентский JavaScript для получения списка других URL.
  3. Создайте тест для каждого URL.
  4. Выполнить тесты одновременно .

Рабочий пример, который использует один тест и выполняется последовательно

Приведенный ниже сокращенный тестовый пример работает, но это не совсем то, что мне нужно, он выполняет следующее:

  1. Выполнить тест.
  2. Перейдите к URL в хуке «до» теста.
  3. Выполните клиентский JavaScript для получения списка 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}`);
    })
  );
});

Контекст

В реальном приложении я пишу дымовые тесты для сборника рассказов [2]. Чтобы получить список всех URL, мне нужно вызвать результат require('@storybook/react').getStorybook(), который доступен только в клиентском приложении Storybook во время выполнения. Я оставил эти детали в сокращенном тестовом примере, поскольку они не имеют ничего общего с TestCafe.

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

1 Ответ

0 голосов
/ 12 ноября 2018

Я думаю, что лучше разделить вашу задачу на две части. Во-первых, вам нужно получить все проверенные URL-адреса через ClientFunction и сохранить эти URL-адреса где-нибудь (например, в глобальной переменной), используя первый тестовый файл. Затем запустите новую задачу TestCafe с параметром concurrency и задайте для параметра src свой второй тестовый файл. Лучший способ сделать это - использовать функцию createTestCafe. Пожалуйста, прочитайте следующую статью http://devexpress.github.io/testcafe/documentation/using-testcafe/programming-interface/createtestcafe.html

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