Генерация динамического теста Mocha в перед блоком не выполняется
Как было предложено в этом посте , я попробовал следующее, но вижу, что на самом деле тест не выполняется. Что мне здесь не хватает, вызов test.getMochaTest() не выполняется в блоке before.
describe('Dynamic Tests for Mocha', async () => {
let outcome ;
before(async() => {
await init().catch(() => console.error('Puppeteer environment initialization failed'));
return collectTests().then(async(collectTests) => {
console.info('4.Executing tests :');
describe('Dynamic test execution', async() => {
collectTests.forEach(async(test) => {
console.info(`\tModule under test : ${test.name}`);
// impl. of test.getMochaTest() DOES NOT get executed.
it(test.name, async() => outcome = await test.getMochaTest().catch(async () => {
console.error(`error while executing test:\t${test.name}`);
}));
});
}) ;
});
});
after(async () => {
console.info('5. Exiting tests...');
await HelperUtils.delay(10000).then(async () => { await browser.close(); });
console.log('executing after block');
});
it('placeholder', async() => {
await
console.log('place holder hack - skip it');
});
});
Здесь возвращается массив тестов:
async function collectTests():Promise<Array<IBizxTest>> {
console.info('3.Collecting tests to execute ...');
testArray = new Array<IBizxTest>();
const instanceEntry:IBizxTest = new SfInstance('Instance Check');
const login:IBizxTest = new SfLogin('Login Check');
const dcCheck:IBizxTest = new SfDataCenter('DataCenter check', navMenu);
testArray.push(dcCheck);
testArray.push(instanceEntry);
testArray.push(login);
// testArray.push(dataCenter, login, instanceEntry);
return testArray;
}
Нижеприведенная реализация
getMochaTest
в SLogin -> не выполняется.
export default class SLogin extends BTest implements ITest {
constructor(name: string) {
super(name);
}
async getMochaTest():Promise<Mocha.Func> {
return async () => {
console.log('Running Login check');
expect(true).to.equal(true);
};
}
}
1 ответ
Не похоже, что вы действительно запускаете тест.
Вызов
test.getMochaTest()
возвращает только функцию асинхронного теста в обещании, но не выполняет ее. Так что ваши
catch
блок обнаруживает ошибки при получении функции, а не при ее выполнении .
Мы надеемся, что разделение его на несколько строк прояснит ситуацию.
Вот что делает ваш образец кода. Обратите внимание, что он никогда не выполняет возвращаемую тестовую функцию:
it(test.name, async () => {
const testFn = await test.getMochaTest().catch(() =>
console.error(`error while ***obtaining*** test: \t${test.name}`));
// oops - testFn never gets called!
});
А вот исправленная версия, в которой фактически вызывается тест:
it(test.name, async () => {
const testFn = await test.getMochaTest().catch(() =>
console.error(`error while ***obtaining*** test: \t${test.name}`));
const outcome = await testFn().catch(() =>
console.error(`error while ***executing*** test: \t${test.name}`));
});
Примечание: я написал это таким образом с помощью и
catch()
чтобы лучше соответствовать формату вашего образца кода. Однако стоит отметить, что он смешивает / и
Promise
синтаксис. Более идиоматичным было бы отлавливать ошибки с помощью
try/catch
блокировать при использовании
async
/
await
.