Я использую jest для запуска модульных тестов на инструменте, который генерирует YAML и JSON, это не чистый javascript.Jest позволяет мне на самом деле проверять значения в выводе, так что это очень удобно.
У меня есть каталог, компоненты:
/workdir/components/
├── component1
└── component2
И в каждом из этих компонентов у меня есть тесткаталог с некоторыми шутками в нем.Вот пример теста:
// Define tests for component
//
const _ = require("lodash");
const componentName = 'my_component';
const {
getTestEnvironmentComponents
} = require("../../../lib/testHelpers.js");
const component = getTestEnvironmentComponents(componentName);
test("Checking array properties", () => {
expect(Array.isArray(component)).toBe(true);
expect(component).toHaveLength(2);
});
Внутри testHelpers.js
У меня есть это:
module.exports = {
getTestEnvironmentComponents: function (component) {
const contents = require('.././components/'+component+'/tmp/test-manifest.json');
return contents;
},
},
};
Итак, у меня есть вспомогательный скрипт, который ожидает, что в каталоге компонентов будет создан сгенерированный файл JSON,
Теперь мне нужно создать этот файл JSON перед каждым тестом и для каждого компонента.Что делает это трудным, так это то, что метод создания этого файла JSON отличается для каждого компонента.Когда я проводил тестирование для одного компонента, я просто добавил jest.config.js
к компоненту следующим образом:
module.exports = {
globalSetup: "./test/0-setup.js",
verbose: true,
};
И затем определил 0-setup.js
для теста следующим образом:
// This file is the "globalSetup" file.
// FIXME: make this global somehow
module.exports = () => {
const execa = require("execa");
const fs = require("fs");
const path = require("path");
const command = "generate-json";
const output = execa.shellSync(command);
const testEnvironmentOutput = JSON.parse(output.stdout);
if (!fs.existsSync("./tmp")) {
fs.mkdirSync("./tmp");
}
fs.writeFileSync('./tmp/test-manifest.json', JSON.stringify(testEnvironmentOutput));
};
Это работает для одного компонента, но это означает, что для запуска моих jest
тестов мне нужно пройти на каждый отдельный компонент и запустить jest отдельно.
Итак:
- Есть ли способ определить задачи установки в каталоге компонентов?
- Возможно, есть лучший способ сделать это так, чтобы я мог запустить
jest
из корневого каталога, и он будетпройти через поддеревья и запустить задачи установки другим способом?