Как выполнить модульное тестирование переменных var

Я тестирую угловое приложение. Этот факт не должен иметь здесь большого значения. Моя функция для тестирования выглядит так:

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

Функция работает как нужно. Массив 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); 

У меня вопрос, как проверить это значение переменной?

1 ответ

Я не уверен, так как трудно сказать ваши намерения, и если у вас есть какие-либо другие глобальные, но я думаю, что ваша ошибка в том, что вы используете activeItems за пределами его охвата., но опять же, это трудно сказать, потому что у вас могут быть другие глобальные переменные, вызывающие проблему. Если это так activeItems вне его области, то it достигнет ошибки при expect,scope, а такжеexpect снова. Тогда это не повлияет на массив, и он останется таким же, как он был отредактирован во время showItem

Надеюсь это поможет!

Другие вопросы по тегам