Jasmine + Angular模块常量

时间:2014-04-16 07:19:58

标签: angularjs jasmine

我有一个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之后,我才知道它因为常数而发生了。我认为常数没有正确注入

有人可以面对这个问题吗? 请分享您的想法。

1 个答案:

答案 0 :(得分:0)

问题是,在执行控制器的spyOn语句后,将调用您的if方法。所以你需要在执行之前调用spyOn。将spyOn执行从it块移至beforeEach块。