简单javascript增量不';不行?(实际上,量角器问题不是javascript)

简单javascript增量不';不行?(实际上,量角器问题不是javascript),javascript,angularjs,protractor,Javascript,Angularjs,Protractor,简单JavaScript计数器不工作 我在量角器(角度测试框架)中使用JavaScript,但我认为这不是量角器的问题,而是JavaScript的问题 我想我可以做到这一点:(伪代码实际代码如下) 但即使有匹配的值,计数器也不会增长。 实际代码为: 'use strict'; describe('list page ', function () { it('should list page', function() { var counter = 0;

简单JavaScript计数器不工作

我在量角器(角度测试框架)中使用JavaScript,但我认为这不是量角器的问题,而是JavaScript的问题

我想我可以做到这一点:(伪代码实际代码如下)

但即使有匹配的值,计数器也不会增长。 实际代码为:

'use strict';

describe('list page ', function () {

    it('should list page', function() {

        var counter = 0;

        element.all(by.repeater('page in pages')).each(function (page) {
            element.all(by.repeater('item in items')).each(function (item) {
                if (item.getText() == ("A+")) {
                    counter++;
                }
            })
        })
    })
})
计数器始终为0。你看到这里的问题了吗?
谢谢大家!

首先,您需要修复丢失的右括号
foreach
应该只是
for
。在我们的
for
循环中,我们说:
smailitems[item]
而不仅仅是
item
。外环也一样。最后,我们不想使用
函数
,这定义了一个新函数,它没有被调用,所以我们不需要它:

for (smallitems in bigitems) {
    for (item in bigitems[smallitems]) {
        if(bigitems[smallitems][item] == "somevalue"){ counter++; }
    }
}  
item.getText()
是一个webdriver承诺[Object Object],因此它永远不会
==“a+”

不使用
expect
时,您需要遵守承诺。之所以
expect(item.getText()).toEqual(“A+”)
可以工作,是因为
expect
为您解析承诺,并在本例中执行与“A+”的字符串比较

回到手头的问题,您似乎正在尝试计数,以实现对总计数的预期:

describe('count on filtered elements', function() {
    // page objects
    var pagesRepElms = element.all(by.repeater('page in pages'));
    var itemsLocator = by.repeater('item in items');

    // since Protractor 1.3 more interesting page objects can be stored
    var aPlusElms = pagesRepElms.all(itemsLocator).filter(function(item) {
        return item.getText().then(function(text) {
            return text === 'A+';
        });
    });

    it('gathers and performs the count expectation in 1 line', function() {
      // modify 5 with your expected count
      expect(aPlusElms.count()).toEqual(5);
    });
});

您是否通过
alert
console.log
检查增量部分是否已实际执行?
foreach
错误。JavaScript中的结构是(对象中的var x)。你把它和
myArray.forEach(函数(d){/*dosomething*/})
混淆了
if
forEach
->
的结束括号。哇,对不起。我在做伪编码。(至少对于第一个),我相信其中包含与下面相同的逻辑。奇怪的是,底部的那个从来不会增加计数器。只是修正了,当我说
smallitems[item]
时,我应该说
bigtimes[smallitems][item]
。谢谢你给我指明了正确的方法。至于量角器,它不接受你跟我玩的逻辑。我在寻找背后的逻辑,但没有成功。它似乎在这把小提琴中工作:。注意我没有说
var counter=0以上。我检查到项目之间确实存在匹配的元素(该项目。getText()==(“A+”)变为true)。我现在没有时间尝试。但越来越强烈的感觉就是这样!。我可以问一下您在哪里发现“//如果您想在it()规格之间保持状态,需要在这里找到它吗”?有没有我遗漏的文档:)非常感谢。这不是文档中的内容,而是Jasmine在承诺之外的范围和期望方面的工作方式。我已将答案简化为最佳解决方案,祝您好运;)
describe('count on filtered elements', function() {
    // page objects
    var pagesRepElms = element.all(by.repeater('page in pages'));
    var itemsLocator = by.repeater('item in items');

    // since Protractor 1.3 more interesting page objects can be stored
    var aPlusElms = pagesRepElms.all(itemsLocator).filter(function(item) {
        return item.getText().then(function(text) {
            return text === 'A+';
        });
    });

    it('gathers and performs the count expectation in 1 line', function() {
      // modify 5 with your expected count
      expect(aPlusElms.count()).toEqual(5);
    });
});