Используя TestCafe [1], я хотел бы сделать следующее:
- Перейдите к URL.
- Выполните клиентский JavaScript для получения списка других URL.
- Создайте тест для каждого URL.
- Выполнить тесты одновременно .
Рабочий пример, который использует один тест и выполняется последовательно
Приведенный ниже сокращенный тестовый пример работает, но это не совсем то, что мне нужно, он выполняет следующее:
- Выполнить тест.
- Перейдите к URL в хуке «до» теста.
- Выполните клиентский JavaScript для получения списка URL-адресов в хуке «до» теста.
- Выполните утверждения для каждого 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