2016-04-04 6 views
1

を失敗した私は、テキストを含む要素をフィルタリングし、次のコードを持っている:分度器数()期待が予期せず

var myspan = searchChoices.filter(function(elem, index) { 
     return elem.getText().then(function(text) { 
      //console.log('index text:' +text); 
      return text === 'Consultant 110'; 
     }); 
    }); 

    expect(myspan).not.toBe(null); 
    myspan.count().then(function (x) { 
     console.log('count:'+x); 
    }); 

    expect(myspan.count()).toBe(1); // this succeeds 
    expect(myspan.count()===1).toBe(true); // <---This fails 

奇妙なことは、最後の行の前の行に期待が成功したが、最後の1に障害が発生したということです。理由は何ですか ?

+0

[ '数()'](https://angular.github.io/protractor/#/:あなたは=== 1チェックをしたい場合

FYI、手動で約束を解決することができapi?view = ElementArrayFinder.prototype.count)は、整数ではなく約束を返します。 'expect()'は約束を処理する方法を知っていますが、 'count()=== 1'は常に失敗します。 – Phil

+0

評価する前にすべての約束を解決するとは思わないでしょうか? – chrisl08

+0

はい、それはあなたに渡すブール値です。約束ではありません。 – Phil

答えて

3

プロトラクターに含まれるwebdriverのすべてが、約束のキューで後で解決されるControl Flowに置かれるオブジェクトを返すことを覚えておいてください。実際の値はすぐには利用できません。それは約束に Sを理解するためにパッチを当てである(実際にはjasminewd2中)分度器で - -

さて、expect()は特別な振る舞いをし、それは期待を行う前に約束を解決します。このため、あなたの場合はexpect(myspan.count()).toBe(1)が働いています。そして、myspan.count()===1はいつもfalseです - myspan.count()自体は約束であり、常に1と等しくないので。

myspan.count().then(function (actualCountValue) { 
    expect(actualCountValue === 1).toBe(true); 
});