2017-05-16 527 views
0

我是新來的茉莉花。這是我的指令茉莉花單元測試

(function() { 
'use strict'; 
angular.module('AccountPortal.components').directive('forgotPasswordForm', forgotPasswordForm); 
forgotPasswordForm.$inject = ['Account', 'accountApi', 'emailApi', 'utils', 'Exception']; 
function forgotPasswordForm(Account, accountApi, emailApi, utils, Exception) { 

    var directive = {}; 
    directive.restrict = 'E'; 
    directive.templateUrl = 'app/components/_utilities/forgotPasswordForm/forgotPasswordForm.html'; 
    directive.controller = ['$scope', ctrl]; 
    directive.controllerAs = 'vm'; 
    directive.scope = {}; 

    return directive; 

    function link(scope, elem, attrs, vm) { 

    } 

    function ctrl($scope) { 
     var vm = this; 
     vm.formSubmitted = false; 
     vm.email = ''; 
     vm.forgotPasswordSubmit = function() { 
      if (!vm.forgotPasswordForm.$valid) { 
       return; 
      } 
      delete vm.forgotPasswordForm.email.$error.accountNotFound; 
      Account.customerForgotPassword(vm.email) 
       .then(function (response) { 
        emailApi.sendForgotPasswordEmail(response.data.EmailAddress, response.data.FirstName, response.data.LastName, response.data.QueryString); 
        vm.formSubmitted = true; 
       }) 
       .catch(function (response) { 
        if (response.status === 400) { 
         $scope.forgotPasswordForm.email.$error.accountNotFound = true; 
        } 
        else { 
         throw new Exception(); 
        } 
       }); 
     }; 
    } 
} 

})();

在這裏,我測試了我的控制器和它的功能來定義。在第三它塊,我想測試是否emailApi.sendForgotPasswordEmail功能與(response.data.EmailAddress,response.data.FirstName,response.data.LastName,response.data.QueryString)參數調用

describe('forgotPasswordForm directive', function() { 
var ctrl,emailApi, $componentController; 
beforeEach(module('AccountPortal')); 
beforeEach(inject(function (_$componentController_, _emailApi_) { 
    $componentController = _$componentController_; 
    ctrl = $componentController('forgotPasswordForm'); 
    emailApi=_emailApi_; 
    ctrl.forgotPasswordForm = { 
     $valid: true, 
     email: { 
      $error:{} 
     } 
    }; 
})); 

beforeEach(inject(function(_Account_) { 
    Account = _Account_; 
})); 


it('forgotPasswordForm controller should be defined', function() { 
    expect(ctrl).toBeDefined(); 
}); 

it('forgotPasswordSubmit function should be defined', function() { 
    expect(ctrl.forgotPasswordSubmit).toBeDefined() 
}); 

it('new password should be sent if email exists', function() { 


}); 

});

感謝您的幫助球員,我真的找不出

回答

0

Account.customerForgotPassword(vm.email)似乎是返回一個承諾,所以你可以做這樣的事情

spyOn(Account,'customerForgotPassword').and.callFake(function(){ 
      return new Promise(function(resolve,reject){ 
       resolve({ 
         data:{'firstname':'xx', 
           'emailAddress':'yy', 
           'LastName':'zz', 
           'queryString':'aa' 
           } 
       }) 
      }) 
     }) //This will return any data you want to the then function 
    spyOn(emailApi,'sendForgotPasswordEmail'); 
    //call the ctrl function 
    expect(emailApi.sendForgotPasswordEmail).toHaveBeenCalledWith('yy','xx','zz','aa') 
+0

這並沒有爲我工作。 未捕獲預期的間諜sendForgotPasswordEmail已被['yy','xx','zz','aa']調用,但它從未被調用過。 無論如何,謝謝。 –