Я тестирую Угловое приложение. Однако этот факт не должен иметь большого значения. Моя функция для тестирования выглядит следующим образом:Как измерить переменные var 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 вместо вар activeItems), то все работает; однако я считаю, что если переменная не должна отображаться в представлении, она не должна быть назначена области.
Первый ожидать будет работать, так как определяется внутри блока:
expect(activeItems.length).toEqual(2);
Во-вторых, не будет:
expect(activeItems.length).toEqual(1);
, но это было бы для видимости переменных:
expect(scope.activeItems.length).toEqual(1);
Мой вопрос состоит в как проверить значение var?
Это звучит так, как будто вы пытаетесь проверить внутреннюю реализацию вашего метода. Сделайте шаг назад, подумайте о том, что ваша функция пытается достичь с точки зрения бизнеса/функциональности, и напишите ваши тесты в соответствии с этим. – DoctorMick
Кроме того, 'activeItems' является свойством вашей' $ scope' в вашей текущей реализации 'showItem', поэтому для того, чтобы вы могли проверить, что на самом деле это что-то, нужно добавить его в область видимости, иначе это всего лишь глобальная переменная. Во-вторых, 'activeItems' должен быть назначен, поскольку вы используете его в обоих случаях выбора. –
Спасибо за ваши комментарии (в том числе @ wyattbergeron1 ниже). Мне сказали, что не нужно прикреплять к переменным $ scope, которые не будут отображаться в представлении. Вот почему activeItems является глобальным var вместо $ scope.activeItems. Позже в коде activeItems используется для создания другого массива $ scope, который проверен правильно. Ваши ответы помогли выяснить, что нужно протестировать. – Marcin