2016-06-12 4 views
1

Я пытаюсь создать цикл, который перемещается по нескольким страницам, и создает тесты, которые немного отличаются для каждой страницы. Тот факт, что он асинхронный, отбрасывает меня, и я не смог найти способ сделать это. Попытка использовать только обычный цикл приводит к тому, что страница всегда устанавливается на самую последнюю страницу в массиве. Я пробовал использовать закрытие несколькими способами, но не имел никакой удачи. Я думаю, что это правильный путь. Я посмотрел на вопрос this, и он дал мне несколько хороших идей, но я до сих пор не смог заставить работать.Прокрутка страниц для создания тестов в транспортирторе

var bs = new BasicSteps(); 

describe("Some description", function() { 
    var pages = ['/page1', '/page2', '/page3']; 

    var i = 0; 
    beforeEach(function() { 
     bs.navigate(pages[i]); 
     browser.sleep(2000); 
     i++; 
    }); 

    for(page in pages) { 
     // Code for the spec 
     it('Some spec', function() { 
      // Some code for the tests 
      if(page == 1) { 
       console.log("page1"); 
      } 
      else if(page == 2) { 
       console.log("Page2"); 
      } 
      else if(page == 3) { 
       console.log("Page3"); 
      } 
     }); 
    } 
}); 

Это печатает Page3 три раза, так как цикл выполняется почти сразу. Я пробовал использовать закрытие, но это вызывает некоторую неясную ошибку и просто сработает, прежде чем что-нибудь запустится.

var funcs = []; 

function createfunc(page) { 
    return function() { 
     // Code for the spec 
    }); 
} 

for(var page = 0; page < pages.length; page++) { 
    funcs[page] = createfunc(page); 
} 

for(var j = 0; j < funcs.length; j++) { 
    funcs[j](); 
} 

ответ

0

Вы можете использовать замыкание, чтобы обойти транспортиры асинхронных обещания создавать тесты в цикле, если у вас есть набор страниц, которые должны иметь тот же тест применяется к ним.

Чтобы написать тестовый цикл, вы могли бы сделать что-то вроде следующего:

// Array of objects with name and URL of each page 
var pages = [{'name': 'page1', 'url': 'someurl.com/page1'}, 
      {'name': 'page2', 'url': 'someurl.com/page2'}]; 

describe("Some description", function(){ 
    function specBlock(curPage) { 
    describe(curPage.name, function(){ 
     it('Some test', function() { 
     // Test goes here 
     }); 
    }); 
    }; 

    createSpecBlock = function(specBlock) { 
    return specBlock; 
    } 

    var funcCall = createSpecBlock(specBlock); 

    pages.forEach(function(curPage){ 
    funcCall(curPage); 
    }); 
}); 
Смежные вопросы