6

問題

を呼び出すと、整数ではなくrepeater('#myTable tr','Rows').count();が返されます。Future追加の行がテーブルに追加されたことを確認できるように、整数値を取得する必要があります。

コード

it('should add a new user when save button is clicked',function()
    {
        showModal();

        //here I'm trynig to store the row count of my table into  a local variable.
        //a future is returned who's 'value' field is undefined.
        var memberCount = repeater('#memberTable tr','Member Rows').count();

        //this outputs 'undefined'
        console.log(memberCount.value);


        input('editedMember.name').enter('John');
        input('editedMember.grade').enter(5);
        input('editedMember.ladderPosition').enter(3);

        element('#saveMemberButton').click();
        sleep(1);
        expect(element(modalId).css('display')).toBe('none');

        //here is where I want to do the comparison against the above stored memberCount
        expect(repeater('#memberTable tr', 'Member Rows').count()).toBe(memberCount.value + 1);


    });

テスト結果

Chrome 25.0 e2e should add a new user when save button is clicked FAILED
    expect repeater 'Member Rows ( #memberTable tr )' count toBe null
    /Users/jgordon/learning/chessClub/web-app/test/e2e/scenarios.js:45:3: expected null but was 6
Chrome 25.0: Executed 2 of 2 (1 FAILED) (1 min 4.117 secs / 1 min 3.773 secs)
4

4 に答える 4

4

Angularjs の e2e サポートのソース コードを掘り下げると、 を呼び出しexecute()Futureその値を設定する必要があることがわかります。また、呼び出すexecuteときは、「完了」関数を提供する必要があります。それ以外のexecute()場合、Testacular は (奇妙なことに十分です!) テストをスキップします。

コード

var rowCountFuture = repeater('#memberTable tr','Member Rows').count();
        
        rowCountFuture.execute(function(){
        });
        
        var memberCount = rowCountFuture.value;

私はこれが機能するのを見て興奮していますが、これから発生する可能性のある非同期バグがいくつかあるのではないかと心配しています。また、これはハックであり、正しい方法ではないように感じます. 何か案は?

于 2013-01-28T17:25:32.530 に答える
2

分度器の最新バージョンに基づく:

it('should add a new user when save button is clicked', function() {
    var memberCount;
    element.all(by.repeater('#memberTable tr','Member Rows')).count().then(function(value) {
        memberCount = value;
    });
    ...
    // then do all your entering user info, saving etc.
    ...
    browser.refresh(); // or however you want to load new data
    expect(element.all(by.repeater('#memberTable tr','Member Rows')).count()).toEqual(memberCount + 1);
});
于 2014-06-30T15:36:02.330 に答える
1

私は同じ問題に遭遇し、呼び出しvalueにテストが返されたときに混乱する結果を見ました。この方法がより確実に機能することがわかりました。execute()

var getCount = repeater('ul li').count();
getCount.execute(function(value) {
    expect(value).toEqual(3);
});
于 2013-08-09T04:21:05.860 に答える
1

これは、ロケーターによって返される async promise で最も簡単に実行できます。

element.all(By.repeater 'thing in things').then(function(elements){
      count = elements.length;
      expect(count).toEqual(3);
});
于 2014-04-22T02:37:37.413 に答える