AngularJS e2e测试:如何获得repeater().count()的值?

Joh*_*don 6 end-to-end angularjs karma-runner

问题

调用repeater('#myTable tr','Rows').count();返回a 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);


    });
Run Code Online (Sandbox Code Playgroud)

测试结果

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)
Run Code Online (Sandbox Code Playgroud)

Joh*_*don 4

深入研究 Angularjs 的 e2e 支持的源代码会发现,您必须调用execute()才能Future填充其值。另外,当你打电话时,execute你必须提供一个“完成”功能,否则execute()睾丸将(奇怪的是!)跳过你的测试。

代码

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

虽然我很高兴看到这个工作,但我担心可能会出现一些异步错误,而且,我觉得这是一个黑客,而不是正确的方法。有任何想法吗?