使用 Jasmine 在角度范围内测试 JavaScript 函数

Testing javascript function within angular scope using jasmine

本文关键字:测试 JavaScript 函数 范围内 Jasmine 使用      更新时间:2023-09-26

>我在angularjs中创建了一个应用程序,我学会了为angularjs编写jasmine单元测试用例,但问题是在我的应用程序中,我既有角度范围方法,也有普通的JavaScript函数,当我为该函数编写测试用例时,我得到以下异常

ReferenceError: isInvalid is not defined
    at null.<anonymous> (http://fiddle.jshell.net/_display/:83:16)
    at jasmine.Block.execute (http://jasmine.github.io/1.3/lib/jasmine.js:1064:17)
    at jasmine.Queue.next_ (http://jasmine.github.io/1.3/lib/jasmine.js:2096:31)
    at jasmine.Queue.start (http://jasmine.github.io/1.3/lib/jasmine.js:2049:8)
    at jasmine.Spec.execute (http://jasmine.github.io/1.3/lib/jasmine.js:2376:14)
    at jasmine.Queue.next_ (http://jasmine.github.io/1.3/lib/jasmine.js:2096:31)
    at onComplete (http://jasmine.github.io/1.3/lib/jasmine.js:2092:18)
    at jasmine.Spec.finish (http://jasmine.github.io/1.3/lib/jasmine.js:2350:5)
    at null.onComplete (http://jasmine.github.io/1.3/lib/jasmine.js:2377:10)
    at jasmine.Queue.next_ (http://jasmine.github.io/1.3/lib/jasmine.js:2106:14)

工作演示

angular.module('myApp',[]).controller("Controller", function($scope) {
    $scope.addNumbers = function(val1, val2) {
        var result = isInvalid(val1) + isInvalid(val2),
            tax = 6,
            watt = 5;
        return (result + tax + watt);
   };   
});
function isInvalid(value) {
   if( value=== null || value === undefined || value === '' ||isNaN(parseInt(value)))
   {
       return 0;
   }
   else
   {
       return value;
   }
}
describe('Testing a controller', function() {
    beforeEach(module("myApp"));
    var ctrl, scope;
    beforeEach(inject(function($controller, $rootScope) {
        scope = $rootScope.$new();
        ctrl = $controller("Controller", {
            $scope: scope
        });
    }));
    it('test add numbers', function() {
        expect(scope.addNumbers(2,6)).toMatch(19);
    });
    it('test isInvalid', function() {
        expect(isInvalid(6)).toMatch(6);
    });
});
(function() {
    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.updateInterval = 1000;
    var trivialReporter = new jasmine.TrivialReporter();
    jasmineEnv.addReporter(trivialReporter);
    jasmineEnv.specFilter = function(spec) {
        return trivialReporter.specFilter(spec);
    };
    $(function() {
        jasmineEnv.execute();
    });
})();
isInvalid是在

控制器函数的作用域内定义的。要对其进行测试,您应该在控制器的作用域(公共)之外定义函数,或者在$scope对象中注册它。基本上,茉莉花不能看控制器内部。