Javascript 量角器角度无法获取元素的计数
我正在尝试编写一个测试,在该测试中,我检查ng重复中的项目数量。之后,我在ng repeat中添加1项,我想看看旧值+1是否等于新值 这是我的html: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方法中,但是我得到的是一个对象而不是一个数字 我有什么地方做错了吗? 感谢您提前提供的任何帮助是的!让你绊倒的是异步编程。您的测试的
<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你是对的。根据我在写这个答案后获得的经验,我意识到我可以对我的代码进行相当多的清理。谢谢你引起我的注意。