我有一个依赖于控制器的指令,该控制器通过Ajax调用从api获取数据。它工作正常。我试图使用jasmine测试它,奇怪的问题是,当我调试代码并检查一个值时,让我们说$scope.measurement
它返回true,但是当我在终端中运行时它找不到{{ 1}}并引发错误$scope.measurement
。不知道可能是什么问题。我认为问题可能在于隔离范围,但Expected undefined to be true
没有函数element
。有什么可以解决的问题吗?
这是控制器:
isolateScope()
这是指令:
'use strict';
angular.module('myApp')
.controller('MeasurementsTimelineCtrl', ['$scope', 'Measurements', function($scope, Measurements) {
$scope.measurements = null;
var userId = $scope.currentUser ? $scope.currentUser.id : null;
if (userId) {
var listOfMeasurements = Measurements.users(userId);
listOfMeasurements.then(function(data){
$scope.measurements = data;
});
}
});
这是测试:
'use strict';
angular.module('myApp')
.directive('measurementTimeline', function() {
return {
restrict: 'E',
templateUrl: 'myView.html',
controller: 'MeasurementsTimelineCtrl',
link: function(scope, element){
scope.$on('measurements-updated', function(measurements) {
_.defer(function(){
if(measurements) {
scope.measurementScroll = true;
}
});
});
}
};
}]);
答案 0 :(得分:1)
怎么样?
it('should ......', function () {
expect(element.scope().measurementScroll).toBe(true);
});
更新:
我认为您还需要在_.defer
上使用andCallThrough方法spyOn(obj,'method')。andCallThrough()
答案 1 :(得分:0)
修改强> 似乎波纹管解决方案是一个“完美的错误案例”。然而,即使它们是错误的,测试通过它们也永远不会下降。
错误的解决方案 在改变以下内容后,测试通过了:
it('should ......', function () {
scope.$evalAsync(function() {
expect(scope.measurementScroll).toBe(true);
});
});
更新:正确解决方案
@Michal Charemza在this question中解决了这个问题的正确解决方案 - How to test _.defer() using Jasmine, AngularJs