Javascript 量角器角度无法获取元素的计数

Javascript 量角器角度无法获取元素的计数,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我正在尝试编写一个测试,在该测试中,我检查ng重复中的项目数量。之后,我在ng repeat中添加1项,我想看看旧值+1是否等于新值 这是我的html: <tr ng-repeat="list in listData.myLists">...</tr> 但我得到的7不等于NaN 我也尝试过将list.count+1直接添加到toEquals方法中,但是我得到的是一个对象而不是一个数字 我有什么地方做错了吗? 感谢您提前提供的任何帮助是的!让你绊倒的是异步编程。您的测试的

我正在尝试编写一个测试,在该测试中,我检查ng重复中的项目数量。之后,我在ng repeat中添加1项,我想看看旧值+1是否等于新值

这是我的html:

<tr ng-repeat="list in listData.myLists">...</tr>
但我得到的7不等于NaN

我也尝试过将list.count+1直接添加到toEquals方法中,但是我得到的是一个对象而不是一个数字

我有什么地方做错了吗?
感谢您提前提供的任何帮助

是的!让你绊倒的是异步编程。您的测试的问题是,在这里我添加了一个项目之后,测试的后半部分在amount=c之前进行评估;因为您的第一个then语句仍在等待count返回,所以将对其求值。因此,当expect语句被命中时,amount仍然没有值,向其添加1将不起作用,因为它仍然为null,至少在几毫秒内是如此。这很有趣,但承诺就是这样起作用的

以下代码将完成此操作:

describe("list test", function(){
    it('Description of the test', function(){
        browser.get('app/#/list');

        var list = element.all(by.repeater('list in listData.myLists'));

        list.count().then(function(amount) {

            // ... Here I add an item ...

            var secondAmount = element.all(by.repeater('list in listData.myLists')).count();

            expect(secondAmount).toEqual(amount + 1);
        });
    });
});
在尝试使用list.count返回的值执行某些操作之前,等待list.count承诺异步返回非常重要。这就是then声明的目的;它强制测试的其余部分等待计数完成。这样,一切都会按照你期望的顺序发生

这是必要的,因为您使用的是金额+1。量角器的expect语句理解如何使用承诺,但如果您正在修改返回值,则不理解。我们可以在不使用then函数的情况下将secondAmount承诺直接放在expect语句中,但不能将list.count+1放在expect语句中


有关更多详细信息,请参见。试着对Node.JS异步编程和Javascript承诺有一个深刻的理解,它会让你的量角器生活得更好

是的!让你绊倒的是异步编程。您的测试的问题是,在这里我添加了一个项目之后,测试的后半部分在amount=c之前进行评估;因为您的第一个then语句仍在等待count返回,所以将对其求值。因此,当expect语句被命中时,amount仍然没有值,向其添加1将不起作用,因为它仍然为null,至少在几毫秒内是如此。这很有趣,但承诺就是这样起作用的

以下代码将完成此操作:

describe("list test", function(){
    it('Description of the test', function(){
        browser.get('app/#/list');

        var list = element.all(by.repeater('list in listData.myLists'));

        list.count().then(function(amount) {

            // ... Here I add an item ...

            var secondAmount = element.all(by.repeater('list in listData.myLists')).count();

            expect(secondAmount).toEqual(amount + 1);
        });
    });
});
在尝试使用list.count返回的值执行某些操作之前,等待list.count承诺异步返回非常重要。这就是then声明的目的;它强制测试的其余部分等待计数完成。这样,一切都会按照你期望的顺序发生

这是必要的,因为您使用的是金额+1。量角器的expect语句理解如何使用承诺,但如果您正在修改返回值,则不理解。我们可以在不使用then函数的情况下将secondAmount承诺直接放在expect语句中,但不能将list.count+1放在expect语句中


有关更多详细信息,请参见。试着对Node.JS异步编程和Javascript承诺有一个深刻的理解,它会让你的量角器生活得更好

量角器元素函数异步运行并返回承诺。试试这个

describe("list test", function() {
    it('Description of the test', function () {
        browser.get('app/#/list');

        element.all(by.repeater('list in listData.myLists')).count()
        .then(function (amount) {
            // ... Here You add an item
            element.all(by.repeater('list in listData.myLists')).count()
                .then(function (secondAmount) {
                    expect(secondAmount).toEqual(amount + 1);
                })
        })
    });
});

量角器元素函数异步运行并返回承诺。试试这个

describe("list test", function() {
    it('Description of the test', function () {
        browser.get('app/#/list');

        element.all(by.repeater('list in listData.myLists')).count()
        .then(function (amount) {
            // ... Here You add an item
            element.all(by.repeater('list in listData.myLists')).count()
                .then(function (secondAmount) {
                    expect(secondAmount).toEqual(amount + 1);
                })
        })
    });
});

谢谢!现在它不仅起作用了,而且我明白我做错了什么!我将对异步编程做更多的研究!这是解决方案,但只是对代码的一个建议:第二个。then语句是不必要的。@NemanjaMilosavljevic你是对的。根据我在写这个答案后获得的经验,我意识到我可以对我的代码进行相当多的清理。谢谢你引起我的注意。非常感谢!现在它不仅起作用了,而且我明白我做错了什么!我将对异步编程做更多的研究!这是解决方案,但只是对代码的一个建议:第二个。then语句是不必要的。@NemanjaMilosavljevic你是对的。根据我在写这个答案后获得的经验,我意识到我可以对我的代码进行相当多的清理。谢谢你引起我的注意。