苦苦挣扎为AngularJS编写Jasmine测试用例

时间:2016-02-23 07:37:17

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

1 个答案:

答案 0 :(得分:0)

对于上面的控制器代码我已经通过删除注入的服务用户服务和common.js编写了jasmine testcase

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

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

评论了与$ userservice和jasmine testcase相关的代码,如下所示,并且工作正常......我的问题是当我注入其他依赖项时写的是什么,即'userservice''common'

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

});

});