簡體   English   中英

茉莉花進行單元測試

[英]Unit testing with jasmine

我是茉莉的新手。 這是我的指令

(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();
                    }
                });
        };
    }
}

})();

在這里,我已經測試了控制器及其要定義的功能。 在第三個It塊中,我想測試是否使用(response.data.EmailAddress,response.data.FirstName,response.data.LastName,response.data.QueryString)參數調用emailApi.sendForgotPasswordEmail函數。

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 () {


});

});

謝謝你們的幫助,我真的不知道

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM