首页 > 解决方案 > 赛普拉斯,JavaScript 变量在 .each 方法中增加后仍然等于 0

问题描述

嗨,我有这样的柏树测试,我不知道为什么在 .each 方法之后 zeroCounter 变量仍然为 0。我检查了日志,并且在 .each 方法的末尾是否块 zeroCounter 等于 7。你能帮我解决这个问题吗?

it('TEST', () => {
    var zeroCounter = 0;
    cy.addDimensionByPropertyPanel('date');
    cy.exAddMeasureByPropertyPanel('data_with_nulls');
    cy.get('[tid="qv-object-VLC]').should('be.visible');
    cy.exShowValues();
    cy.exSelectDataAndGaps("Show as connections");
    cy.get('.vizlib-line-values')
        .each(($value) => {
            expect($value.text()).to.not.equal('-');
            if ($value.text() === "0.00") {
                zeroCounter++
                cy.log(zeroCounter);
            }
        })
    expect(zeroCounter).to.equal(7);
    cy.qsTakeScreenshot('Show null data as zero');
});

标签: javascripttestingcypress

解决方案


问题是赛普拉斯不会按需执行内部调用,而是进入队列等待执行。在您的情况下,该行在expect(zeroCounter).to.equal(7);之前执行.each(...),因此值为 0。

您需要使用expect内部then()工作:

cy.get('.vizlib-line-values')
.each(($value) => {
    ...
}).then(() => {
    expect(zeroCounter).to.equal(7);
});

推荐阅读