2016-09-27 6 views
1

私は今、私の髪の毛が少し残っているかを痛感しています。 私は左膝に視力を失ったと思います。投射器、約束事、パラメーター、および閉鎖

私には2つの機能があります。 それぞれがパラメータを正しく取得します。 私は心から愛されるでしょう。

私はスーパーシンプルなデータ構造を持っている:

var stuff = [ 
      { name: "Stone", id: "cc45" }, 
      { name: "Hanley", id: "cc78" } 
     ]; 

私は構造をループしたいとそれぞれの超簡単なテストを実行します。ご了承ください:

for (var ii = 0; ii < stuff.length; ii++) { 
     var aTile = element(by.id(stuff[ii].id)); 

     aTile.getText().then(
      /* magical solution */ 
    ); 
    } 

すべて私は魔法の解決策がありません。 (また、魔法を欠い)バージョンBでは

aTile.getText().then((function (text) { 
     console.log(" --Protractor Grab--" + text); 
    })); 

を、私は成功した私は分度器-つかんテキストを比較したいデータを見張ることができます。バージョン(魔法を欠い)Aで私は正常に分度器が親切につかんでテキストを考えることができますto:

aTile.getText().then((function (test) { 
     console.log(" ==Stuff test==" + test); 
    })(stuff[ii].name)); 

私ができないことは、私が引き出した髪の毛がどれほどであっても、分度器に両方を比較させることです。効果的に、私はこれを追加する必要があります。コードの

expect(protractorGrabbedText).toContain(expectedTextFromStuff); 

してください種類の英雄を、私を助けて、私はあなたを懇願します。

+1

あなたは 'expect(aTile.getText())toContain(stuff [ii] .name)'を試しましたか? –

+0

いいえ、私はそれがそのように動作することを認識していませんでした!愚かな私:)しかし、私はいくつかの伐採が私を妨げたかった - まだそれは治療を働く! – Dave

答えて

3

非常に簡単です。あなたが使用しているので

expect()方法は

for (var ii = 0; ii < stuff.length; ii++) { 
    var aTile = element(by.id(stuff[ii].id)).getText(); 
    expect(aTile.getText()).toContain(stuff[ii].name) //This will take care of resolving the promises. 
} 

方法-2、暗黙的に解決し、以下のようなものを使用することができ、実際のdata.Youと比較した結果を使用するための約束を作るための能力を持っていますループでは、クロージャを使用して約束内にiiの値を取得する必要があります。以下のコードを試してください。

for (var ii = 0; ii < stuff.length; ii++) { 
    function closure(index){ 
     element(by.id(stuff[index].id)).getText().then(function(text){ 
     expect(text). toContain(stuff[index].name) 
    }) 
    } 
closure(ii) 
} 
+0

ブリリアント、方法2は完璧です、私はそこに余分なログを行うことができます。そして、私は今、私の以前の試みのエラーを鮮明に見ることができます - 歓声! メソッド1にはaTile.getText()が必要です。 – Dave

+1

'var aTile = element(by.id(stuff [ii] .id))に' .getText() 'を記述しています)getText();' –

+0

ああ、私!はい!ごめんなさい! – Dave

2

上記の答えは2番目です。これはうまくいくはずです

for (var ii = 0; ii < stuff.length; ii++) { 
    var aTile = element(by.id(stuff[ii].id)); 
    expect(aTile.getText()).toContain(stuff[ii].name) 
     }