Динамическое создание тестов theIntern.io на основе асинхронного источника данных - PullRequest
0 голосов
/ 04 марта 2019

Я хочу прочитать удаленный источник данных (который возвращает обещание результата), а затем использовать этот результат для определения набора тестов.

const { suite, test, before } = intern.getInterface('tdd');
const testDef = (theTest) => {
  const searchString = theTest.name;
  return theTest.remote
    .get('http://www.google.com?q=' + searchString )
    .findDisplayedByXpath(`//input[@name='q' and @value='${searchString }']`)
    .end();
};
(async () => {
  const caseIds = await getCaseIds(); // a promise that resolves to an array of ids
  suite('a suite of tests', function (theSuite) {
    caseIds.forEach((id) => {
      const testName = id;
      test(testName , testDef);
    });
  });
})();

Проблема в том, что асинхронный IIFE завершается иВнутренний загрузчик продолжает запускать пустой набор тестов.В конце концов, обещание разрешается, и определение набора продолжается, но только после того, как исполнитель узла уже давно возвратился:

No unit test coverage for chrome 69.0.3497.81 on Windows NT
chrome 69.0.3497.81 on Windows NT: 0 passed, 0 failed
TOTAL: tested 1 platforms, 0 passed, 0 failed

Есть ли событие ("preRun") или перехват в intern.configure или способиспользовать плагин для ожидания вызова getCaseIds () до того, как загрузчик решит, что я определил тесты?

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете действовать в beforeRun обработчике событий, например

const { suite, test, before } = intern.getInterface('tdd');

const testDef = ...;

intern.on('beforeRun', () => {
  return getCaseIds()
    .then(caseIds => {
      suite(...);
    });
});
...