#jasmine #protractor #specifications
#jasmine #транспортир #спецификации
Вопрос:
Мой код, как показано ниже
describe("Smoke-Test-", function() {
beforeAll(async function() {
getSteps = await specGenerator.execute(); //value is returned properly here
return getSteps //this returns an array object
});
beforeAll(async function () {
const remote = launch.command;
return page = po.init(remote)
.maximizeWindow()
.get(url)
.sleep(2000);
});
testRunner(getSteps) `//I want to use return value in function and call spec below. Is this possible? Execute function should be run as per the count`
Here getSteps returns Number.
function testRunner(count) {
it('test', async function () {
for(var j=0;j< count;j )
{
execute()
}
});
}
Ожидается: получить возвращаемое значение из beforeAll и использовать его в функции для вызова или запуска спецификации.
Фактически: возвращаемое значение недоступно вне beforeAll.
Обновить:
it('test', async function () {
console.log(getSteps) //prints value as I moved inside it as suggested
testRunner(getSteps) //this should trigger testRunner function
}
Но это завершается ошибкой,
Error: 'it' should only be used in 'describe' function
Как мы запускаем одну спецификацию из другой спецификации?
Ответ №1:
Когда вы запускаете транспортир, он выбирает файлы спецификаций, указанные в конфигурации, и выстраивает очередь из describe
, it
, beforeAll
и afterAll
блоков. ВАЖНАЯ ДЕТАЛЬ ЗДЕСЬ ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТО ЭТО ПРОИСХОДИТ ЕЩЕ ДО ЗАПУСКА БРАУЗЕРА.
Посмотрите на этот пример
let conditionIsTrue; // undefined
it('name', () => {
conditionIsTrue = true;
})
if (conditionIsTrue) { // still undefined
it('name', () => {
})
}
К тому времени, когда транспортир достигает if()
инструкции, значение conditionIsTrue
все еще undefined
равно. И, возможно, оно перезаписывается внутри этого блока позже, при запуске браузера, но не при создании очереди. Поэтому он пропускает его.
Другими словами, транспортир знает, какие блоки описания он будет запускать, еще до того, как он откроет браузер, и эта очередь НЕ может быть изменена во время выполнения
Комментарии:
1. @sridattas если вы опубликуете содержимое
specGenerator.execute()
, я, возможно, смогу найти обходной путь2. Я узнал об этом очень рано, когда начал работать с транспортиром. Я должен регулярно объяснять это своей команде.
3. @SergeyPleshakov Я обновил функциональный блок. specGenerator.execute() возвращает число, и на основе этого числа должна выполняться функция TestRunner. Содержимое specGenerator.execute() очень велико.