使用Jasmine测试作为参数传递给Angular代码中的其他函数的函数

时间:2016-12-28 10:00:36

标签: angularjs jasmine

这是示例代码段。 我有一个服务 Myservice ,我有 myfunction ,当承诺被拒绝时我抓住错误并调用errorPopup,再次调用函数 ShowApiError 服务 popUpservice 。它接受函数 userOkayedCallback 作为参数

在这个函数中,我已经完成了对window.location.href的URL分配。

我的问题:如何在茉莉花中对此作业进行单元测试?

 function somefunction(){
     Myservice.myfunction(vm.arg).then(function(){
       //some code here
    },


    function (error) {
             errorPopup(error);
        });
    }


    function errorPopup(){
    popupService.showApiError(userOkayedCallback, error.status);
    }

    function userOkayedCallback(){
        $window.location.href = vm.url                   
    }}

1 个答案:

答案 0 :(得分:1)

describe('spec', function() {
  beforeEach(function(){
    angular.mock.module(function ($provide) {
      $provide.value('popupService', {
        'showApiError': userOkayedCallback => userOkayedCallback()
      });
      $provide.value('$window', {
        location: {href: ''}
      });
    });
  });

  it('should relocate the user', function() {
    $httpBackend.expect('GET', 'url/to/service').respond(500, []);
    Myservice.myfunction();
    $httpBackend.flush();
    expect($window.location.href).toBe('something');
  });
});

这不是一个有效的例子,但你明白了。模拟popupservice和一个只执行回调的函数,然后使用$ httpBackend失败服务调用并检查window.href是否是正确的值。

要使下面的代码工作,你需要注入依赖性。