Я пытаюсь протестировать следующий код, который работает только в том случае, если $scope.checkOutDate
не определен в первую очередь.
$scope.checkInUpdatesCheckOutDate = function(checkOutViewValue){
var checkInDateInMilliseconds = new Date($scope.checkInDate).getTime(),
InMilliseconds = new Date(checkOutViewValue).getTime(),
diffBetweenCheckOutAndCheckIn = Math.floor((checkOutDateInMilliseconds - checkInDateInMilliseconds) / oneDay);
if(diffBetweenCheckOutAndCheckIn > 0){
$scope.$apply(function(){
$scope.checkOutDate = $filter('date')(new Date(checkOutViewValue).getTime(), 'EEEE, M/dd/yyyy');
$scope.nights = diffBetweenCheckOutAndCheckIn;
});
}
}
Но когда я запускаю свой тест на жасмин и тестирую $ scope.checkOutDate, он никогда не изменяется с неопределенного. Моя функция должна установить $scope.checkOutDate
равным checkOutViewValue
(текущее значение на входе в представлении).
Вот мой тест:
describe('checkInUpdatesCheckOutDate', function(){
it('should work', function(){
$scope.checkInDate = '9/17/15';
var checkOutViewValue = '9/20/15';
var result = $filter('date')(new Date(checkOutViewValue).getTime(), 'EEEE, M/dd/yyyy');
$scope.checkInUpdatesCheckOutDate ();
expect($scope.checkOutDate).toEqual(result);
});
});
Вместо того, чтобы вводить код внутри функции $scope.$apply
, просто вызовите $scope.$digest()
в нем
Вызовите $scope.$apply()
сразу после вызова функции. Это должно вызвать цикл "дайджест" и выполнить код в блоке "применить".