Как выполнить модульное тестирование переменных 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
Надеюсь это поможет!