#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
.