努力为 AngularJS 编写 Jasmine 测试用例



下面的代码是我的控制器逻辑,我想为它创建一个Jasmine测试用例。有了$inject我遇到了如何模拟或使用$inject中使用的服务并为下面的 AngularJS 控制器逻辑编写 Jasmine 测试用例的问题。

(function () {
    'use strict';
    var controllerId = 'user';
    angular.module('app').controller(controllerId, user);
    user.$inject = ['$rootScope', 'userService', 'common'];
    function user($rootScope, $userService, common) {
        var vm = this;
        vm.users = [];
        vm.sorting = {
            column: "UpdatedDate",
            order: 0
        };
        vm.gridHeaders = [
            { title: "UserName", visible: true, sort: true, name: 'UserName', filter: true, type: 'string' },
            { title: "First Name", visible: true, sort: true, name: 'FirstName', filter: true, type: 'string' },
            { title: "Middle Name", visible: true, sort: true, name: 'MiddleName', filter: true, type: 'string' },
            { title: "Last Name", visible: true, sort: true, name: 'LastName', filter: true, type: 'string' },
            { title: "Email Address", visible: true, sort: true, name: 'EmailID', filter: true, type: 'string' },
            { title: "Phone Number", visible: true, sort: true, name: 'PhoneNumber', filter: true, type: 'string' },
            { title: "Mobile Number", visible: true, sort: true, name: 'MobileNumber', filter: true, type: 'string' },
            { title: "City", visible: true, sort: true, name: 'City', filter: true, type: 'string' },
            { title: "Role", visible: true, sort: true, name: 'RoleID', filter: true, type: 'int' },
            { title: "Address", visible: true, sort: true, name: 'Address', filter: true, type: 'string' },
            { title: "UserType", visible: true, sort: true, name: 'UserType', filter: true, type: 'int' },
            { title: "RoleName", visible: true, sort: true, name: 'RoleName', filter: true, type: 'string' }
        ];
        vm.editUser = function (value) {
            if (value > 0) {
                var request = [{
                    "PageNumber": vm.pagination.currentPage,
                    "PageSize": vm.pagination.pageSize,
                    "SortColumn": vm.sorting.column,
                    "SortOrder": vm.sorting.order,
                    "Query": "UserID=" + value
                }];
                $userService.sendUserID(request);
            }
        }
        vm.loadUserSearchDetails = function () {
            //common.showSpinngMan();
            var pageConstants = common.preparePageConstants();
            vm.pageDropDown = pageConstants.pageDropDown;
            vm.pagination = pageConstants.pagination;
            loadGrid();
        };
        vm.loadPageData = function (scenario) {
            vm.pagination.currentPage = common.setPagination(scenario, vm.pagination)
            loadGrid();
        };
        //Load grid 
        var loadGrid = function (data) {
            var request = [{
                "PageNumber": vm.pagination.currentPage,
                "PageSize": vm.pagination.pageSize,
                "SortColumn": vm.sorting.column,
                "SortOrder": vm.sorting.order,
                "Query": ""
                // Filters: vm.filterPanel.savedFilter
            }];
            $rootScope.loading = true;
            $userService.getUserDetails(request).then(function (result) {
                debugger;
                if (!!result) {
                    vm.users = result.SearchUsers;
                    vm.pagination.totalRecords = vm.users.length;
                    vm.pagination.totalPages = Math.ceil(vm.pagination.totalRecords / vm.pagination.pageSize);
                }
            }).catch(function (result) {
                console.log("error load grid");
                //$location.path("/error");
            }).finally(function () {
                $rootScope.loading = false;
            })
        };
        return vm;
    }
})();

对于上面的控制器代码,我通过删除注入的服务UserService和common编写了Jasmine测试用例.js

新部分包括: user.$inject = ['$rootScope', 'userService', 'common'];行已移除

function user($rootScope) { // , $userService, common params removed
    var vm = this;
    vm.users = [];

评论了与$userservice相关的代码,并编写了如下所示的Jasmine测试用例,它工作正常..我的问题是当我注入其他依赖项时如何编写,即"用户服务"常见"

describe("A suite", function () {

beforeEach(module('app'));
var $controller;
var mockServiceDepedency;
beforeEach(inject(function (_$controller_) {       
    $controller = _$controller_;       
}));
it("testing 5", function () {
    var $rootScope = {};
    var controller = $controller('user', { $rootScope: $rootScope });               
    expect(controller.users).not.toBeNull();
    expect(controller.users).toEqual([]);
    expect(controller.sorting.column).toEqual("UpdatedDate");
    expect(controller.sorting.order).toEqual(0);
    expect(controller.gridHeaders[0]).toEqual({ title: "UserName", visible: true, sort: true, name: 'UserName', filter: true, type: 'string' });
    expect(controller.pageDropDown).not.toBeNull();
    expect(controller.pageDropDown).not.toBeNull();
    expect(controller.loadUserSearchDetails.pageConstants).not.toBeNull();
});

});

最新更新