Jest | test.каждая таблица | Как настроить тест.каждая таблица с переменными, определенными в функции beforeAll

#javascript #node.js #jestjs

Вопрос:

Как я могу интерполировать test.each таблицу с переменными, определенными в другом месте? В следующем примере я пытаюсь использовать someData defined in beforeAll . Вот самая забавная функциональность, которую я использую: https://jestjs.io/docs/api#testeachtablename-fn-timeout

Следует фрагмент кода того, что я пытаюсь сделать:

 const someCall = async () => {
  return { field: "lalala" };
};

describe(`Some test suite`, () => {
  let someData;

  beforeAll(async () => {
    const callOutput = await someCall();
    someData = callOutput.field;
  });

  beforeEach(async () => {});

  it.each`
    data                | moreData
    ${{ name: "Jack" }} | ${"foo"}
    ${someData}         | ${"bar"}
  `("Tests here...", async ({ data, moreData }) => {
    console.log("Data:", data);                // <---- data is undefined for the second test
    console.log("More data:", moreData);
  });
});
 

Проблема в том, что во втором тесте someData undefined вместо того, чтобы иметь значение "lalala" .

Комментарии:

1. Ты не можешь. Все существующие тесты должны быть известны во время запуска теста. Исходите из этого факта и используйте данные как-то иначе.

2. Хорошо, тогда я думаю, что решение состоит в том , чтобы использовать табличные литералы в качестве «указателей» на конкретные данные, создаваемые записанной логикой beforeAll , необходимые для каждого теста.

Ответ №1:

Из документа, определяющего тесты, говорится:

Тесты должны быть определены синхронно, чтобы Jest мог собирать ваши тесты.

Примечание: Это означает, что при использовании теста.каждый из них вы не можете установить таблицу асинхронно в пределах beforeEach / beforeAll.

Предложение: Вы должны подготовить тестовые данные перед определением наборов тестов и тестовых случаев. Создайте data.json файл, используйте Node.js сценарий или сценарий оболочки и т. Д… Перед запуском скрипта запросите и используйте data.json файл из вашего тестового файла npm test .