2016-06-12 6 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を3回印刷します。私はクロージャを使用しようとしましたが、これはいくつかのあいまいなエラーが発生し、何かが実行される前にクラッシュします。

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); 
    }); 
}); 

テストループを作成するには、以下のような何かをするだろう

関連する問題