简体   繁体   中英

how to write a unit test case for the following angular function

how to write a unit test case for the following angular function. I'm new to karma and jasmine. function with rootscope and also have to test window.open inside if statement.

  $rootScope.getStandardMapPDF = function (mt, g, u, m) 
        {

    var menuTitle = mt.trim();
    var grade = g.trim();
    var unit = u.trim();
    var module = m.trim();
    /*---->Getting the Grade, Unit and Module wise Help files <-------*/
    if ($.isEmptyObject($rootScope.StandardMapFiles)) {
        $rootScope.StandardMapFiles = DataProvider.StandardHelpMaster;
    }

    var obj = $rootScope.StandardMapFiles;
    for (var i = 0; i < obj.length; i++) {
        if (obj[i].Grade.toLowerCase().indexOf(grade.toLowerCase()) != -1 && obj[i].Unit.toLowerCase().indexOf(unit.toLowerCase()) != -1 && obj[i].Module.toLowerCase().indexOf(module.toLowerCase()) != -1 && obj[i].MenuTitle.toLowerCase() == menuTitle.toLowerCase()) {
            if (obj[i].FileType.toLowerCase() == 'pdf') {
                var path = 'Resources/StandardMappings/' + obj[i].FileName.trim() + '.pdf';
                //var path = '/fs/oleshare/ole-mygen/StandardMappings/' + obj[i].FileName.trim() + '.pdf';
                $window.open(path, '_blank');
            }
            else if (obj[i].FileType.toLowerCase() == 'video') {
                var path = 'Resources/Video/' + obj[i].FileName.split('.')[0].trim() + '.htm';
                $window.open(path, '_blank');
            }
        }
    }
};

Here's a basic outline of how you write a test:

(function() {
    describe('your.controller.name.js', function() {
        var $rootScope, $window;           

        // Init
        beforeEach(module('your-app-name'));
        beforeEach(inject(function(_$rootScope_,_$window_) {
            $rootScope = _$rootScope_;
            $window = _$window_;
        }));

    // Spies
    beforeEach(function() {
        spyOn($window,'open');
    });

    it('should be defined', function() {
        expect($rootScope.getStandardMapPDF).toBeDefined();
    });
    describe('$rootScope.getStandardMapPDF', function() {
        beforeEach(function() {
            $rootScope.getStandardMapPDF()
        });
        it('should call $window.open', function() {
            expect($window.open).toHaveBeenCalled();
        });
    });
}());

Why are you attaching a function to the $rootScope anyway?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM