我有一个Angular应用程序,我为应用程序定义了常量。
var module=angular.module('abc');
module.constant('constants',{
INTERNAL_VALUE:1
});
在我的控制器中,我写了以下几行
if(someService.getInternalValue() === constants.INTERNAL_VALUE){
$scope.showDropdown=true;
someservice.somefunction().then(function(data){
$scope.dropDownData=data;
});
}else{
$scope.showDropdown=false;
}
我已经为if条件编写过jasmine测试用例,但它总是处于其他状态。
it('should show dropdown on user persmission',inject(function($controller){
spyOn(someServiceMock,'getInternalValue').andCallFake(function(){
return 1;
});
expect(someServiceMock.getInternalValue()).toBe(1); // passed
expect(constants.INTERNAL_VALUE).toBe(1);// passed
expect(scope.showDropdown).toBe(true); // here it should be true but I am getting "Expected false to be true." error
}));
当我做了一些RnD之后,我才知道它因为常数而发生了。我认为常数没有正确注入
有人可以面对这个问题吗? 请分享您的想法。
答案 0 :(得分:0)
问题是,在执行控制器的spyOn
语句后,将调用您的if
方法。所以你需要在执行之前调用spyOn
。将spyOn
执行从it
块移至beforeEach
块。