如何对var变量进行单元测试

时间:2014-12-08 10:59:42

标签: javascript angularjs jasmine var

我测试Angular应用程序。这个事实在这里不应该是非常重要的。 我要测试的功能如下:

    $scope.showItem = function (item) {
        if (item.selected) {
            activeItems.push(item);
        } else {
            var index = _.indexOf(activeItems, items);
            activeItems.splice(index, 1);
        }
    };

功能可以根据需要运行。 Array activeItems用于另一个函数,该函数在一些修改后将结果分配给范围。 行为是,如果未选择该项,则将其添加到数组中。如果该项目已被选中,则将从阵列中删除该项目。

    it('should remove an item from the array', function () {
        var activeItems = [{id: 1, selected: false}, {id:2, selected: true}];
        var item = {
            id: 1,
            selected: false
        };
        expect(activeItems.length).toEqual(2);
        scope.showItem(item);
        expect(activeItems.length).toEqual(1); // FAIL!
        // expects do not work for var variables. would work, if activeItems is assigned to the scope
    });

如果我将activeItems分配给范围(scope.activeItems而不是var activeItems),那么一切正常;但是,我相信如果变量不在视图中显示,则不应将其分配给范围。

首先期望会起作用,因为它是在块内定义的:

expect(activeItems.length).toEqual(2);

第二个不会:

expect(activeItems.length).toEqual(1);

但它适用于范围变量:

expect(scope.activeItems.length).toEqual(1); 

我的问题是如何测试该var值?

1 个答案:

答案 0 :(得分:0)

我不是正面的,因为很难说出你的意图,如果你有其他的全局,但我认为你的错误是你在{39}之外使用它{39} ;范围。,但再次很难说,因为你可能有其他全局因素导致问题。如果activeItems不在其范围之内,则activeItems将再次出现itexpectscope错误。然后它不会影响数组,它将保持在expect期间编辑

希望这有帮助!